0

我正在尝试使用 dbContext 将实体保存到 db。

Type entityType = Type.GetType("class");
object ob = db.Set(entityType).Create(entityType);
ob.GetMethod("set_Id").Invoke(ob, new object[] { newId });

//...other set code...

db.Set(entityType).Add(ob);
db.SaveChanges(); -- here fires exception

但是在 SaveChanges 触发异常之后

“当 IDENTITY_INSERT 设置为 OFF 时,无法在表 'TableName' 中插入标识列的显式值”。

在分析器中,我看到了带有我设置的 id 的标准插入批次。如何在身份插入 ON 的情况下将实体对象添加到 db,或者如何只保存新的 entityObject?

4

2 回答 2

1

Entity Framework 假定整数主键是数据库生成的。如果您不想这样做,则必须使用属性HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)使用 Fluent API 调用将其关闭。

你现在有一个问题,因为这只能在第一次使用。您必须在此处删除表或使用其他选项之一如何在实体框架代码首次迁移中打开/关闭身份

于 2013-10-11T07:58:59.183 回答
0

似乎您有一个表定义,说数据库应该插入 ID 并且不允许应用程序执行此操作。同时尝试插入 id 值的实体框架布局。

您可以使用以下方法允许应用程序插入 ID: http ://technet.microsoft.com/en-us/library/aa259221(v=sql.80).aspx 以允许它。

问题是您真的要允许应用程序可以选择自己的 ID 吗?还是您想让数据库决定?

在这种情况下,您应该检查 dbml 文件中的属性。Id 列应该有一个属性“自动生成的值”。它必须设置为 True。

于 2013-10-11T06:23:16.273 回答