使用方法Set(Type)在dbContext上设置标识ON。添加(实体)

时间:2013-10-11 05:52:04

标签: c# entity-framework dbcontext

我正在尝试使用dbContext将实体保存到数据库。

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触发异常

之后
  

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

在分析器中,我看到标准插入批次,其中设置了ID。如何通过标识插入ON将实体对象添加到db,或者如何保存新的entityObject?

2 个答案:

答案 0 :(得分:1)

实体框架假定整数主键是数据库生成的。如果您不希望必须使用属性HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)将其关闭,或使用Fluent API调用Property(e => e.EventID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.None)

您现在遇到了问题,因为这只适用于第一次。您必须放弃表格或使用其中一个其他选项how to switch identity on/off in entity framework code first migrations

答案 1 :(得分:0)

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

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

问题是你真的想让应用程序可以选择自己的ID吗?或者您想让数据库决定吗?

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