当主键列不是标识列时,如何插入数据?

时间:2016-10-24 11:52:55

标签: c# sql-server dapper dapper-contrib

我尝试使用Dapper.Contrib在主键列不是标识列的表中插入数据。

使用以下脚本创建数据库表:

begin transaction

create table
    dbo.Foos
    (
        Id int not null,
        Name nvarchar(max) not null
    )
go

alter table
    dbo.Foos
add constraint
    PK_Foos primary key clustered
    (
        Id
    )

go

commit

这是C#类:

public class Foo
{
    public int Id { get; set; }

    public string Name { get; set; }
}

插入这样的数据时:

connection.Insert(new Foo()
{
    Id = 1,
    Name = "name 1"
});

我收到以下错误:

  

无法将值NULL插入列' Id',table' FooDatabase.dbo.Foos&#39 ;;列不允许空值。 INSERT失败。

按照惯例,

Dapper正确地假设Id是主键,但它错误地假设它是一个标识列。如何表明它不是标识列?

1 个答案:

答案 0 :(得分:7)

您可以按this issue使用ExplicitKey属性。

public class Foo
{
    [ExplicitKey]
    public int Id { get; set; }

    public string Name { get; set; }
}

请注意,返回值插入项目的ID,因为通常是在您致电Insert时,而是始终0