当主键列不是标识列时如何插入数据?
Posted
技术标签:
【中文标题】当主键列不是标识列时如何插入数据?【英文标题】:How do I insert data when the primary key column is not an identity column? 【发布时间】:2016-10-24 11:52:54 【问题描述】:我正在尝试使用 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”、表“FooDatabase.dbo.Foos”中;列不允许空值。插入失败。
按照惯例,Dapper 正确地假定 Id
是主键,但它错误地假定它是一个标识列。如何表明它不是标识列?
【问题讨论】:
【参考方案1】:您可以按照this issue 使用ExplicitKey
属性。
public class Foo
[ExplicitKey]
public int Id get; set;
public string Name get; set;
请注意,返回值不是插入项目的 id,因为它通常是当您调用 Insert
时,而是始终是 0
。
【讨论】:
哎呀!比赛迟到了!谢谢!以上是关于当主键列不是标识列时如何插入数据?的主要内容,如果未能解决你的问题,请参考以下文章