EF代码优先:当IDENTITY_INSERT设置为OFF时,无法在表'myTable'中为标识列插入显式值

时间:2012-10-10 04:27:42

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

将主键设置为数据库中的标识(SQL Server)

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

  

无法在表'myTable'中为identity列插入显式值   当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中的依赖属性映射到a   存储生成的列。专栏:'ID'

4 个答案:

答案 0 :(得分:4)

试试这个:

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

答案 1 :(得分:3)

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

因此,要将主键用作标识,可以使用DatabaseGeneratedOption.Identity对其进行装饰
在这种情况下,它会抛出一个异常,因为你不能使用identity作为关系(而不是使用DatabaseGeneratedOption.None)。

答案 2 :(得分:0)

尝试一次:

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

答案 3 :(得分:0)

当IDENTITY_INSERT设置为OFF时,无法在表'myTable'中为identity列插入显式值

ReferentialConstraint中的依赖属性映射到存储生成的列。专栏:'ID'

看起来你没有正确定义你的1 .... 1表关系。如果你的PK是fk,请确保你使用“[Key,ForeignKey(”Caller“)]”。 我讨厌EF抛出异常的方式。采取衰变来找出根本原因。 :(

如果没有修复,那么两个表的问题都是相关的。或者为了根本原因,总是更好地将您的相关表格移动到一个简单的解决方案并在那里进行测试,以便您消除其他事实。并且让自己更熟悉常规,流畅的api和数据注释。