EF尝试插入未更改的实体

时间:2018-04-30 13:29:58

标签: vb.net entity-framework primary-key dbcontext savechanges

编辑:GOT IT!感谢您的帮助:)我最后发布了“解决方案”,尽管我不知道它是否会对任何人有所帮助,但这主要是因为我的设计不好......

尝试.SaveChanges()

时,我收到了DbUpdateException
  

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

InnerException是:

  

违反PRIMARY KEY约束«PK_ProduitDepot_1»...无法在对象 Produit-Depot 中插入重复键..

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

 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()

我在调试模式中看到/ unchangedEntities为空。

我对EF缺少什么?我不明白为什么在我的上下文缓存中只有Unchanged实体时会执行任何SQL ...

Produit-Depot 是一个带*到*关系的联结表,因此EF没有为该表创建一个类(它是数据库的第一个项目)

如果有任何不清楚的地方,请告诉我。

1 个答案:

答案 0 :(得分:1)

<强>解决方案

有趣的部分:

正如Ivan Stoev所指出的,因为错误消息是关于联结表(没有与之关联的类,因为EF在生成我的模型时没有创建任何类),这些权利没有列在{ {1}}。这就是为什么我相信所有实体都处于Unchanged状态。

可能没有帮助的部分:

我使用ChangeTracker.Entries(制作名称,但你得到了想法)通过添加包含解决了我的问题。我曾经只有Context.Person.Include("Cars.Wheels")并且稍后使用FK手动分配我的汽车'Context.MyEntity.Include("Cars")导航属性。这就是问题的来源。

相关问题