【发布时间】:2019-03-17 19:24:11
【问题描述】:
我在尝试从父单数据库记录中删除子实体时遇到了意外问题。 在做了一些测试之后,我们已经复制了这个问题。 我们的 C# 代码使用 Northwind 数据库。
NWModel context = new NWModel();
Orders order = context.Orders.Where(w => w.OrderID == 10248).FirstOrDefault();
context.Entry(order).Collection(typeof(Order_Details).Name).Load();
order.Order_Details.RemoveAt(1);
System.Data.Entity.Infrastructure.DbChangeTracker changeset = context.ChangeTracker;
var changes = changeset.Entries().Where(x => x.State == System.Data.Entity.EntityState.Modified).ToList<Object>();
var detetions = changeset.Entries().Where(x => x.State == System.Data.Entity.EntityState.Deleted).ToList<Object>();
原始 Order_Details 表设置一切正常。
var 正确删除有删除记录。
为了重现该问题,我们在 Order_Details 表上添加了一个新的 PK 标识 int 字段(OrderDetailId int identity);这样做之后: var 删除 不包含记录,而 var 更改 包含 Order_Detail 记录。
EF 将 Order_Detail 的 Orders 属性设置为 null 并将记录标记为 Updated。
我发现很多关于这个问题的文章,都建议将Order_Detail Orders属性标记为[Required]。
我已尝试按照this post 中的建议在 FK 实体上设置 [Required] 属性,(本文描述了与 EF6 行为相同的 EFCore 行为)但不能解决我的问题问题。
这是预期的行为吗?
我们将不胜感激任何 cmets 或建议。
谢谢
【问题讨论】:
标签: c# entity-framework