【问题标题】:EF Code first : Cannot insert explicit value for identity column in table 'myTable' when IDENTITY_INSERT is set to OFFEF 代码优先:当 IDENTITY_INSERT 设置为 OFF 时,无法在表“myTable”中插入标识列的显式值
【发布时间】:2012-09-30 11:40:56
【问题描述】:

在数据库(SQL Server)中设置主键为identity

使用 EF 插入数据时出现错误

无法为表“myTable”中的标识列插入显式值 当 IDENTITY_INSERT 设置为 OFF 时

对于这个特定的实体,虽然我使用与其他实体相同的方法来插入数据并且没有错误。

   public class MyTable 
    {
    [Key/*,DatabaseGenerated(DatabaseGeneratedOption.Identity)*/]
    public int ID{get;set;}
    public string name {get;set;}
    public string type {get;set;}
    public string status {get;set;}
    public int country {get;set;}
    public DateTime start_date {get;set;}
    public DateTime due_date {get;set;}
    }`

查询

    MyTable check= new MyTable();
            check.name = checkName;
            check.type = "DB";
            check.status = "New";
            check.country = country;
            check.start_date = DateTime.Now;
            check.due_date = dueDate;
            db.myTables.Add(check);
            db.SaveChanges();

更新

取消上面一行的注释后

(DatabaseGenerated(DatabaseGeneratedOption.Identity)) 

抛出异常

ReferentialConstraint 中的依赖属性映射到 商店生成的列。列:“ID”

【问题讨论】:

  • 取消注释给定的行 /*,DatabaseGenerated(DatabaseGeneratedOption.Identity)*/ 看看它是否有效
  • 我试过了。它仍然无法正常工作。它让我期待“ReferentialConstraint 中的依赖属性被映射到存储生成的列。列:'ID”

标签: asp.net asp.net-mvc-3 entity-framework entity-framework-4 ef-code-first


【解决方案1】:

试试这个:

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }

【讨论】:

  • 这与 OP 已有的有何不同? (注释掉)
【解决方案2】:

我不确定你的情况是否也是如此......但第二个错误说......你在某些关系中使用你的主键作为外键,这仅对具有 DatabaseGeneratedOption.None 的属性有效。

因此,要将主键用作身份,您可以使用 DatabaseGeneratedOption.Identity 来装饰它
在这种情况下,它会抛出异常,因为您不能将身份用于关系(使用 DatabaseGeneratedOption.None 代替)。

【讨论】:

  • 为了澄清你把注释放在哪里?我假设您的意思是在实体的主键之上。喜欢:[DatabaseGenerated(DatabaseGeneratedOption.None)] 下一条:public int Id {get; set;}
【解决方案3】:

试试这个:

objDBEntities.MyTable.AddObject(
    new tblEmployee
    {
        check.name = checkName,
        check.type = "DB",
        check.status = "New",
        check.country = country,
        check.start_date = DateTime.Now,
        check.due_date = dueDate
    }
);

objDBEntities.SaveChanges();                   

更多详情:Entity Framework: How to add row data with supporting to identity column on

【讨论】:

    【解决方案4】:

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

    ReferentialConstraint 中的依赖属性映射到存储生成的列。列:“ID”

    您似乎没有正确定义 1....1 表关系。如果您的 pk 是 fk,请确保您使用了“[Key,ForeignKey("Caller")]”。 我讨厌 EF 抛出异常的方式。需要衰减来找出根本原因。 :(

    如果未解决您的问题,则两个表都是相关的。或者对于根本原因,最好将相关表移动到一个简单的解决方案并在那里进行测试,这样您就可以消除其他事实。也让自己更加熟悉约定、流利的api和数据注解。

    【讨论】:

      猜你喜欢
      • 2012-09-12
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      • 2016-01-20
      • 2016-05-13
      • 2016-08-18
      相关资源
      最近更新 更多