我尝试使用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
是主键,但它错误地假设它是一个标识列。如何表明它不是标识列?
答案 0 :(得分:7)
您可以按this issue使用ExplicitKey
属性。
public class Foo
{
[ExplicitKey]
public int Id { get; set; }
public string Name { get; set; }
}
请注意,返回值不插入项目的ID,因为通常是在您致电Insert
时,而是始终0
。