4

将主键设置为数据库中的身份(SQL Server)

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

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

对于这个特定的实体,尽管我使用与其他实体相同的方法来插入数据并且它们没有出错。

   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'

4

4 回答 4

4

试试这个:

[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
于 2012-10-10T05:01:15.240 回答
3

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

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

于 2012-10-10T04:48:23.473 回答
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();                   

有关更多详细信息:实体框架:如何添加支持标识列的行数据

于 2013-06-28T07:27:20.867 回答
0

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

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

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

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

于 2016-08-30T19:21:46.947 回答