EF 尝试插入未更改的实体



编辑:知道了!感谢您对人们的帮助:)我在最后发布了"解决方案">,虽然我不知道它是否会帮助任何人,这主要是由于我的设计不好。


我在尝试.SaveChanges()时收到 DbUpdateException

保存未公开其关系的外键属性的实体时出错。属性将返回 null,因为无法将单个实体标识为异常的来源。通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常。有关详细信息,请参阅 InnerException。

InnerException是:

违反主键约束 « PK_ProduitDepot_1 » ...无法在对象产品库中插入重复的密钥。

以下是我用来查看应保存哪些实体的一些代码:

 Dim allEntries = MyContext.ChangeTracker.Entries
    Dim unchangedEntities As New Dictionary(Of Object, EntityState)
    For Each entry As DbEntityEntry In allEntries
        Dim NotUnchangedEntity = entry.Entity
        If MyContext.Entry(NotUnchangedEntity).State <> EntityState.Unchanged Then
            unchangedEntities.Add(entry.Entity, MyContext.Entry(entry.Entity).State)
        End If
    Next
    MyContext.Database.Log = AddressOf Console.WriteLine
    context.SaveChanges()

我在调试模式下看到不变的实体是空的。

关于 EF,我缺少什么吗?我不明白如果我的上下文缓存中只有未更改的实体,为什么会执行任何 SQL......

表 Produit-Depot 是具有 * 到 * 关系的联结表,因此 EF 尚未为该表创建类(这是数据库第一个项目(

如果有什么不清楚的地方,请告诉我。

解决方案

有趣的部分:

正如 Ivan Stoev 指出的那样,由于错误消息是关于一个联结表(它没有与之关联的类,因为 EF 在生成我的模型时没有创建任何类(,因此这些完整的表未在ChangeTracker.Entries中列出。这就是为什么我相信所有实体都处于不变状态。

可能无用的部分:

我用一个添加包含解决了我的问题,使用 Context.Person.Include("Cars.Wheels")(编造名称,但你明白了(。我以前只有Context.MyEntity.Include("Cars"),以后使用 FK 以某种方式手动分配我的汽车Wheels导航属性。这就是问题的来源。

相关内容

  • 没有找到相关文章

最新更新