【问题标题】:Set identity ON on dbContext using method Set(Type).Add(entity)使用方法 Set(Type).Add(entity) 在 dbContext 上设置身份
【发布时间】:2013-10-11 05:52:04
【问题描述】:

我正在尝试使用 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?

【问题讨论】:

    标签: c# entity-framework dbcontext


    【解决方案1】:

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

    您现在遇到了问题,因为这只能在第一次使用。您必须在此处删除表格或使用其他选项之一how to switch identity on/off in entity framework code first migrations

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

      • 嗨,我不想选择自己的 id。我的代码看起来像。但是我尝试在没有标准 dbcontext.Entityobject.Add(entityobject) 的情况下保存 entityObject,但我找不到方法。 db.Set(entityType).Add(ob);使用 id 生成 sql 插入,如果我只知道类型,我只想保存实体对象,因为表具有相同的列类型。也许我的方式一开始就错了。
      猜你喜欢
      • 1970-01-01
      • 2018-06-09
      • 1970-01-01
      • 2011-04-15
      • 2014-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      相关资源
      最近更新 更多