【发布时间】:2013-11-15 10:14:25
【问题描述】:
使用实体框架,在从表中删除任何记录之前,如何判断是否为表启用了删除级联?
public partial class DataContext : DbContext
{
public DbSet<Building> Buildings { get; set; }
public DbSet<Room> Rooms { get; set; }
}
DataContext context;
Building building;
// Will this start a DELETE CASCADE, removing Rooms within the Building?
context.Buildings.Remove(building);
这是一个通用函数,所以我可以使用 DbSet
需要在运行时进行测试,就在调用 Remove() 之前。
您能否在删除之前检测到 DELETE CASCADE,如果可以,如何检测?
【问题讨论】:
-
应该只通过实体框架吗?因为通过 T-SQL 是小菜一碟。
-
我个人认为您不应该为任何表设置级联删除。在我看来,这在任何时候都是一个非常糟糕的主意,因为您最终可能会删除一条记录并锁定许多表并删除数百万条相关记录,这会使您的系统戛然而止。此外,子记录的存在通常是为什么不应该删除父记录的关键。例如,您不应该删除过去有订单的客户。您可能会考虑使用软增量方案。
-
好吧,假设必须删除记录,我更希望自动发生(而不是手动,这会涉及人为错误)。
标签: c# sql entity-framework generics