我正在使用 EF5 POCO 实体(数据库首先不是代码,如果有区别的话)。假设我有以下(假设的)实体类型:-
- 店铺
- 客户(具有 StoreId 的 FK)
- 产品(具有 StoreId 的 FK)
- 订单(带有 CustomerId 和 ProductId 的 FK)
一个商店有很多客户和产品,一个订单基本上是客户和产品之间的一个 MM 连接。
我的一个典型场景涉及检索一个商店实体及其所有相关的客户、产品和订单。有了这个层次结构现在在内存中,用户可以选择通过 UI 删除客户。作为此操作的一部分,我还希望删除客户的相关订单。
这样做是否足够:-
store.Customers.Remove(customerToDelete);
或者是否也有必要在客户的订单和他们的产品之间“断开链接”,例如:-
foreach (var order in customerToDelete.Orders)
{
order.Product.Orders.Remove(order);
}
请注意,更改不一定会立即保留回数据库。用户可以继续使用此内存存储层次结构,并且仅在稍后单击“保存”按钮时才保留更改。因此,如果他们继续通过 UI“浏览”这个实体层次结构,并深入了解特定产品,我不希望他们看到与已删除客户相关的订单。因此,我怀疑我必须执行上述foreach
操作才能清除该客户订单的所有痕迹?
不确定它是否与我的问题有关,但有人可以解释“End1 OnDelete”EDMX 属性的作用吗?我了解级联删除在 SQL 中的工作原理,但不确定此 EDMX 级联选项适用于何处?