编辑:GOT IT!感谢您的帮助:)我最后发布了“解决方案”,尽管我不知道它是否会对任何人有所帮助,但这主要是因为我的设计不好......
尝试.SaveChanges()
保存不公开其关系的外键属性的实体时发生错误。 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没有为该表创建一个类(它是数据库的第一个项目)
如果有任何不清楚的地方,请告诉我。
答案 0 :(得分:1)
<强>解决方案强>
有趣的部分:
正如Ivan Stoev所指出的,因为错误消息是关于联结表(没有与之关联的类,因为EF在生成我的模型时没有创建任何类),这些权利没有列在{ {1}}。这就是为什么我相信所有实体都处于Unchanged状态。
可能没有帮助的部分:
我使用ChangeTracker.Entries
(制作名称,但你得到了想法)通过添加包含解决了我的问题。我曾经只有Context.Person.Include("Cars.Wheels")
并且稍后使用FK手动分配我的汽车'Context.MyEntity.Include("Cars")
导航属性。这就是问题的来源。