C# 标识主列的InsertOrUpdate引发错误

C# 标识主列的InsertOrUpdate引发错误,c#,sql-server,linq,entity-framework-core,linq2db,C#,Sql Server,Linq,Entity Framework Core,Linq2db,我正在使用实体框架核心和SQLServer为InsertOrUpdate撰写以下文章 因此,我的linq2db查询与它们的文档相同 using (var db = new DataConnection()) { db.GetTable<TestTable3>() .InsertOrUpdate( () => new TestTable3 { ID = 5,

我正在使用实体框架核心和SQLServer为InsertOrUpdate撰写以下文章

因此,我的linq2db查询与它们的文档相同

using (var db = new DataConnection())
{
    db.GetTable<TestTable3>()
        .InsertOrUpdate(
            () => new TestTable3
            {
                ID   = 5,
                Name = "Crazy Frog",
            },
            t => new TestTable3
            {
                Name = "Crazy Frog IV",
            });
}
现在我知道无法提供标识列。但如果我不提供,那么它就是抛出错误

LinqToDB.Linq.LinqException: 'InsertOrUpdate method requires the 'TestTable3.Id' field to be included in the insert setter.'

如果您不需要检索刚刚插入的值,则INSERTRUPDATE函数会过载,该函数具有复制键的附加参数:

using (var db = new DataConnection())
{
    db.GetTable<TestTable3>().InsertOrUpdate(
        () => new TestTable3
        {
            Name = "Crazy Frog"
        },
        e => new TestTable3
        {
            Name = "Crazy Frog"
        },
        () => new TestTable3
        {
            ID = 5
        });
}

实际上,标识列可以由显式值填充。我不确定这是否是MS SQL的最佳做法,标识插入也将重新设置,但我还需要在插入时自动递增。即使设置了标识插入,插入时的递增也会起作用,只是递增哪个值?我想插入后,5将被重新设定为6。无法检查,MS SQL连接在SQLFIDLE上不起作用now@vitalygolub,请注意EF Core和linq2db之间的巨大差异。linq2db没有Change Tracker,它可以更好地控制SQL Server发送的内容。
using (var db = new DataConnection())
{
    db.GetTable<TestTable3>().InsertOrUpdate(
        () => new TestTable3
        {
            Name = "Crazy Frog"
        },
        e => new TestTable3
        {
            Name = "Crazy Frog"
        },
        () => new TestTable3
        {
            ID = 5
        });
}