带有标识列的 EF Code First 父子插入 (HELP)

Posted

技术标签:

【中文标题】带有标识列的 EF Code First 父子插入 (HELP)【英文标题】:EF Code First Parent-Child insertions with identity columns (HELP) 【发布时间】:2013-01-02 10:35:28 【问题描述】:

这对我来说很奇怪。 我有两个实体。销售状态(父)和销售(子)。

public class SalesStatus

    [Key]
    public int SalesStatusID  get; set;  /* this is identity column*/

    public string Status  get; set; 

    public virtual List<Sale> Sales  get; set; 


public class Sale

    [Key]
    public int SalesID  get; set;  /* this is identity column*/

    //etc





SalesContext db = new SalesContext();

var ss = new SalesStatus

    Status = "INQ",

        Sales = new List<Sale>()
;

ss.Sales.Add(sale);
db.SalesStatus.Add(ss);
db.Entry(ss).State = EntityState.Added;
db.SaveChanges();

我有一个错误。 实体框架尝试插入具有 PK 值的新记录。 "无法为表中的标识列插入显式值"

但是当我将 EntityState 更改为 EntityState.Detached 或 EntityState.Unchanged 时。 子实体(销售)单独成功插入。(没有销售状态)

我一直很困惑。

我在下面找到了一些案例。但这对我的情况不起作用。 EF Code First Parent-Child insertions with identity columns

我使用 dotnet framework 4.0 / entity framework 4.1

【问题讨论】:

【参考方案1】:

尝试更改主键名称(SalesID 为 SaleID)。可能是EF配置外键错误,

public class Sale

    [Key]
    public int SaleID  get; set;  /* this is identity column*/

    //etc

【讨论】:

以上是关于带有标识列的 EF Code First 父子插入 (HELP)的主要内容,如果未能解决你的问题,请参考以下文章

EF Code First - 如何设置标识增量

使用 EF4 Code First 时如何控制生成的 nvarchar 列的长度?

EF Code First 重命名生成的 POCO 类中的属性

EF Code First - 无法将值 NULL 插入列

如何使用 EF Code-First 插入/更新可更新视图

无法首先在表 ef6 db 中插入标识列的显式值