小编Sua*_*ere的帖子

SQL:删除GroupBy中的所有NOT MAX记录

我的目标是从表中删除不是分组CaseKey的MAX(recordDate)的所有记录.因此,如果我有3组3个casekeys的9条记录,并且每个casekey有3个日期.我将删除每组的2个较低日期,并得出3个总记录,仅剩下每个记录的MAX(recordDate).

我有以下SQL查询:

    DELETE FROM table
    WHERE tableID NOT IN (
    SELECT tableID
    FROM (
    Select MAX(recordDate) As myDate, tableID From table
    Group By CaseKey
    ) As foo
    )
Run Code Online (Sandbox Code Playgroud)

我收到错误:第3行出错...列'table.tableID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.

很显然,我可以添加TABLEID我Group By子句,但随后该语句的结果不正确,并返回所有行,而不是仅仅返回分组CaseKeys的MAX recordDate.

服务器现在已经关闭,但明显的答案是:(来自WildPlasser的答案的微小调整)

DELETE zt FROM ztable zt
WHERE EXISTS (
    SELECT * FROM ztable ex
    WHERE ex.CaseKey = zt.CaseKey
    AND ex.recordDate > zt.recordDate
);
Run Code Online (Sandbox Code Playgroud)

换句话说,对于zt中的每个记录,运行一个查询以查看同一记录是否也有一个记录具有更高的recordDate.如果是,则WHERE EXISTS语句通过并删除记录,否则WHERE语句失败并且记录是其自己的MAX recordDate.

感谢WildPlasser,因为这种简单的方法让我感觉不知所措.

sql

16
推荐指数
2
解决办法
1万
查看次数

列不允许DBNull.Value - No KeepNulls - 正确的列映射

我在.NET 4.5.2中使用c#,推送到SQL Server 2017 14.0.1000.169

在我的数据库中,我有一个带有DateAdded字段的表,类型DateTimeOffset.

我正在尝试使用以下代码进行BulkCopy:

private Maybe BulkCopy(SqlSchemaTable table, System.Data.DataTable dt, bool identityInsertOn)
{
    try
    {
        var options = SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.FireTriggers | SqlBulkCopyOptions.UseInternalTransaction; //  | SqlBulkCopyOptions.CheckConstraints; // Tried CheckConstraints, but it didn't change anything.
        if (identityInsertOn) options |= SqlBulkCopyOptions.KeepIdentity;
        using (var conn = new SqlConnection(_connString))
        using (var bulkCopy = new SqlBulkCopy(conn, options, null))
        {
            bulkCopy.DestinationTableName = table.TableName;
            dt.Columns.Cast<System.Data.DataColumn>().ToList()
                .ForEach(x => bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(x.ColumnName, x.ColumnName)));

            try
            {
                conn.Open();
                bulkCopy.WriteToServer(dt);
            }
            catch (Exception ex)
            {
                return Maybe.Failure(ex);
            } …
Run Code Online (Sandbox Code Playgroud)

c# sql-server datatable

10
推荐指数
1
解决办法
2368
查看次数

短期访问令牌如何增加安全性?

在回答为什么访问令牌会过期?,提供的第一点指出:

[Bearer-Tokens] 是短暂的并且需要刷新,它们限制了攻击者滥用被盗令牌的时间。

但是当使用访问令牌时(来自本机应用程序),客户端使用刷新令牌来获取新的访问令牌,并将该新令牌发送回请求者。因此,如果攻击者使用其他人的访问令牌,他每次只会收到一个全新的访问令牌。

那么谁在乎令牌的持续时间呢?如果攻击者得到它,只要刷新令牌持续,他们就已经接管了会话

我已经知道我的问题的十几个答案,但我对每个答案都有疑问。我最初的问题很长,因为我解释了每个场景以及它们如何无关紧要或错误(据我所知)。所以请尽量帮助我理解,如果我认为答案有警告,我会发表评论。

添加/编辑 - 希望通过我的附加信息获得更多答案

  1. 网页调用具有资源所有者(用户)凭据的客户端
  2. 客户端调用身份验证服务器并获取访问和刷新令牌。访问令牌将在 5 分钟后过期,刷新令牌将在几小时或几天后过期。
  3. 客户端将访问令牌发送到网页
  4. 资源所有者(用户)使用网页
  5. 网页向客户端发送访问令牌
  6. 客户端向资源服务器发送访问令牌
  7. 资源服务器以多种方式检查访问令牌
  8. 资源服务器向客户端发送资源
  9. 客户端将资源发送给资源所有者
  10. 资源所有者(用户)继续使用网页
  11. 客户端在每个请求期间或每 4 分 30 秒使用刷新令牌来获取新的访问令牌
  12. 客户端在每个请求期间或每 4 分 30 秒向活动资源所有者发送一个新的访问令牌

是的?不?由于 Resource Owner 正在Actively使用该网站,该网站与 Client 保持不断的通信,并且 Client 获得一个新的 Access Token(使用刷新令牌)并将其发送回网站,因此Active用户可以继续使用该网站,而不会每 5 分钟被踢出一次。

因此,如果任何人获得该访问令牌,并用它攻击客户端,客户端将继续向拥有该访问令牌的任何人发送新的访问令牌。授予:单次刷新后,这两个人中的一个将拥有错误的访问令牌并被启动,但不一定是正确的人。

oauth-2.0

8
推荐指数
2
解决办法
5580
查看次数

如何从服务器检查协商的 TLS 握手?

如果我有十几个端点,并且我的 WebAPI 服务配置为TLS 1.1TLS 1.2,我如何检查每个传入的端点请求以查看协商的是哪个版本?

因此,如果我的端点的使用者目前仅支持TLS 1.0and TLS 1.1,他们将(显然?)协商TLS 1.1握手。但是如果不同的消费者支持TLS 1.2and TLS 1.3,他们会(显然?)协商TLS 1.2握手。

我想跟踪我所有的消费者,看看正在协商什么握手。我如何按请求执行此操作?

c# asp.net-mvc ssl asp.net-web-api tls1.2

7
推荐指数
1
解决办法
5908
查看次数

EF Fluent API多对多具有不同的ID字段名称

在这个问题:Ef Many To Many,一个关于如何手动指定链接表的答案.但我有一个稍微独特的情况(我肯定不是真的很独特).

我的两个表都有一个Id字段.EG:[dbo].[Account].[Id][dbo].[Person].[Id].我的Code-First中的每个表都有以下OnModelCreating:

modelBuilder.Entity<Account>.HasKey(x => x.Id);
modelBuilder.Entity<Person>.HasKey(x => x.Id);
Run Code Online (Sandbox Code Playgroud)

但我的[dbo].[AccountsToPersons]...桌子有EG:[AccountId][PersonId]

AccountsToPersons表不由代码中的类表示.

我显然已经有了一个现有的模型,但是我们使用EF Code-First Fluent API而不是从数据库更新模型.

那么如何更改此代码以使其与映射不同的ID列名称一起使用?

public DbSet<Person> Persons { get; set; }
public DbSet<Account> Accounts { get; set; }
. . .
modelBuilder.Entity<Account>()
  .HasMany(a => a.Persons)
  .WithMany()
  .Map(x =>
  {
    x.MapLeftKey("AccountId"); // <-- Account.Id to AccountsToPersons.AccountId??
    x.MapRightKey("PersonId"); // <-- Person.Id  to AccountsToPersons.PersonId??
    x.ToTable("AccountsToPersons");
  });
Run Code Online (Sandbox Code Playgroud)

运行基本的Linq To EF Query时(from x in context.Accounts select x).ToList();,查询失败并显示以下错误:

  • "无效的列名'Person_Id'." …

c# entity-framework ef-fluent-api

5
推荐指数
1
解决办法
2823
查看次数

观察对文件的提交

是否有任何通知(电子邮件、文本、屏幕消息、彩色文本等)可以告诉我是否已提交特定文件?

例如:如果开发人员提交了对Web.Config或 的更改Source/Lawls/CrazySauce.js,我有哪些选项可以引起我的注意?

至少,与 Pull-Request 相关的东西是可以的。虽然我并不总是批准/合并的人。充其量,电子邮件或自动 Jira 票或其他东西会很棒。

git bitbucket

5
推荐指数
1
解决办法
1717
查看次数

WoW Lua - 从 URL 获取数据(普通)

在《魔兽世界》普通 Lua 插件开发中,如何发出 HTTP 调用来接收返回的数据?如果没有,我如何在玩游戏时从网络源获取数据?

我有一种感觉,答案很短,但希望在 Stack Overflow 上提出并回答问题。我的研究结果有所欠缺,我记得在 2007 年左右做了一些 LUA,但很失望。

lua world-of-warcraft

5
推荐指数
1
解决办法
4090
查看次数

当特定的 c# 项目更改时 TeamCity 触发构建

我有一个像这样的解决方案,在 Git 中存储:

AwesomeSln
---Web.csproj
---Services.csproj
---Core.csproj
---UnitTests.csproj
---SDK.csproj
Run Code Online (Sandbox Code Playgroud)

大多数解决方案是 Web,CI 由 Azure 处理。测试运行,网络发布,wutevz。

但 SDK 项目是一个相关的 NuGet 包,它为使用此 Web 项目提供帮助。该公司的 NuGet 是使用 TeamCity 设置的。

因此,我想做的是,如果 SDK 项目发生更改,则让 TeamCity 触发 NuGet 构建。但每当发生任何随意的检查时就不会了。

有没有办法仅在一个特定项目发生更改时触发 NuGet 构建?

git teamcity continuous-integration nuget

4
推荐指数
1
解决办法
1032
查看次数

我使用什么样的架构模式/设计?

我的许多企业应用程序都包含多个c#解决方案的架构文本,如下所述.

我有一个类库,包含表示信息的类和接口.例如,一个类表示用户并包含适当的属性.与结构相似.我的任何其他项目都可以引用此项目,以全面了解它们之间传输的对象.这个项目很少或没有逻辑.我称之为"存储库".

我有一个单独的解决方案来处理持久性的访问.它几乎只是调用从持久性源(数据库,网站,文件等)收集数据的包装器.它接收的信息集被格式化为我的"存储库"的类.这个项目很少或没有逻辑.我称之为"持久访问"或"数据访问".该解决方案还主要包括集成测试和几个单元测试.

我有一个单独的解决方案,它为逻辑组织了类和方法.每当客户应用程序(webservice,wpf,web,android)需要由我公司的业务需求确定的逻辑输出时,方法在逻辑上组织成一个或多个这些类.该项目调用我的"持久访问",并且可以以通用类型/集合的形式或以我的"存储库"类型之一的形式接收和输出.该项目根据业务需求包含多个类和几乎所有企业应用程序的逻辑.我称之为"商业逻辑". 该解决方案还主要包括单元测试,也可能包括几个集成测试.

我有一个asp.net Web应用程序项目.我的Web应用程序有javascript,css,aspx,代码隐藏文件,以及其他一些自然伴随这些东西的基础知识(一些ashx).如果页面需要逻辑或数据以确定页面上显示的内容,则Code Behind文件会调用"业务逻辑"来进行这些确定.asp.net aspx对象唯一做的就是格式化这些信息.我将这些页面中的每一个称为"视图""ViewModels". 这个应用程序包含很少的测试,因为它主要只是aspx,xhtml,css和代码隐藏中的一对受保护的事件处理程序.(可能对ashx文件进行了一些测试.)

我的困惑是: 在ASP.Net Web开发术语中,我想说我正在使用模型 - 视图 - 控制器架构.但我不使用Microsoft MVC Web应用程序,因为我想将我的业务逻辑完全分离出网站.

那么说我使用MVC是正确的吗?我以前创建了MS MVC Web应用程序,但是对于可能有多个用于业务逻辑的复杂项目(大多数都是这样),我使用了我所描述的这种架构.或者,我使用其他一些预先命名的架构吗? 我想知道与Web开发有关的架构模式名称. 所以MVVM本身并不直接与我相关.

c# asp.net-mvc

2
推荐指数
1
解决办法
787
查看次数

你能在Redis c#中检索TTL吗?

有没有办法在c#中获得StackExchange.Redis键的TTL(生存时间)?

c# stackexchange.redis

2
推荐指数
1
解决办法
2061
查看次数

vNext Owin中间件

我有一个简单的中间件:

public class MiddlewareInterceptor
{
    RequestDelegate _next;
    public MiddlewareInterceptor(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext ctx)
    {
        ctx.Response.WriteAsync("<h2>From SomeMiddleWare</h2>");
        return _next(ctx);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Startup.cs配置方法中,我像这样挂钩:

app.UseMiddleware<MiddlewareInterceptor>();
Run Code Online (Sandbox Code Playgroud)

上面的构建和应用程序似乎运行正常,但我在拦截器Invoke方法中的断点永远不会命中.同样,从来没有任何产出.我也试过了Debug.WriteLine.

现在,我也试过这个方法:

public class MiddlewareInterceptor : OwinMiddleware
{
    public MiddlewareInterceptor(OwinMiddleware next) : base(next){}

    public override async Task Invoke(IOwinContext context)
    {
        Debug.WriteLine(context.Request.Uri.ToString());
        await Next.Invoke(context);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Startup.cs配置方法中,我像这样挂钩:

app.Use(next => new MiddlewareInterceptor(next).Invoke);
Run Code Online (Sandbox Code Playgroud)

不幸的是,基础OwinMiddleware构造函数正在寻找下一个OwinMiddleware作为参数,与你不同RequestDelegate.所以我的app.Use实例化MiddlewareInterceptor失败是因为next类型RequestDelegate.

最后,我在Configure方法中直接尝试了一个内联函数,它也永远不会遇到断点:

app.Use(async (ctx, next) => …
Run Code Online (Sandbox Code Playgroud)

middleware owin asp.net-core

1
推荐指数
1
解决办法
304
查看次数