C# 标识主列的InsertOrUpdate引发错误
我正在使用实体框架核心和SQLServer为InsertOrUpdate撰写以下文章 因此,我的linq2db查询与它们的文档相同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,
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
});
}