首页 > 解决方案 > 身份主列的 InsertOrUpdate 引发错误

问题描述

我正在关注使用 Entity Framework Core 和 SQL Server 的 InsertOrUpdate 文章。

http://blog.linq2db.com/2015/05/linq-crud-operations.html

所以我的 linq2db 查询与他们的文档相同。

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

但在我的情况下Id是自动递增的身份主列。所以我收到如下错误。

System.Data.SqlClient.SqlException: 'Cannot insert explicit value for identity column in table 'TestTable3' when IDENTITY_INSERT is set to OFF.'

现在我知道无法提供身份列。但是如果我不提供,那么它会抛出错误

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

标签: c#sql-serverlinqentity-framework-corelinq2db

解决方案


如果您不需要检索刚刚插入的值,则 InsertOrUpdate 函数的重载具有重复键的附加参数:

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

推荐阅读