【发布时间】:2017-06-19 03:03:42
【问题描述】:
这是查询:
using (var db = new AppDbContext())
{
var item = new IdentityItem {Id = 418, Name = "Abrahadabra" };
db.IdentityItems.Add(item);
db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT Test.Items ON;");
db.SaveChanges();
}
执行时,新表上插入记录的Id仍为1。
新:当我使用交易或 TGlatzer 的答案时,我得到了异常:
必须为表“项目”中的标识列指定显式值 当 IDENTITY_INSERT 设置为 ON 或复制用户 插入 NOT FOR REPLICATION 标识列。
【问题讨论】:
-
根据这个答案Entity Framework IDENTITY_INSERT ON doesn't work,您只是短暂地打开了身份插入,它不包括插入。如果可能,请尝试创建一个大的 sql 查询字符串,以
"SET IDENTITY_INSERT Test.Items ON;"开头,然后是INSERT INTO...,最后是"SET IDENTITY_INSERT Test.Items OFF;"(多合一查询)。或者,您可以查看TransactionScope Class。 -
@KeyurPATEL 使用直接的
INSERT查询确实违背了 ORM 的目的。我更喜欢交易选项,但也更喜欢内置交易,就像 Aananda 的回答一样。 -
@ProfK : 对于例外情况,您能否到模型设计器(edmx)并选择属性 Id(这是 Identity 列)并将 StoreGenratedPattern 修改为 None 而不是 Identity ?您必须更改它,因为您要插入标识列。这应该可以修复异常。
-
如果没有任何效果,一种选择是映射存储过程以插入该实体。 entityframeworktutorial.net/entityframework6/… 。您可以传递一个标志,该标志将根据标志值设置识别插入。
-
@GertArnold 虽然主要问题不是如何维护连接,而是如何让 EF 在插入命令中包含 Id 值。
标签: c# entity-framework entity-framework-6 identity-insert