0

实体框架 4.0 项目。

我目前正在使用 INSTEAD OF DELETE 触发器进行级联删除。

有没有办法在我的数据模型代码中做到这一点?

我想过通过部分类添加我的数据上下文类。然后使用 ObjectStateManager.ObjectStateManagerChanged 监视删除,然后先删除子项。问题是我无法连接到构造函数以确保我的事件被连接起来。我想我可以创建一个创建上下文的工厂方法,然后连接事件......

然后在我的委托中,这也有点不稳定,因为我必须使用最少的反射来确定要删除的元素的类型,然后删除它的子元素。

我觉得我一定遗漏了一些东西:就像每个实体类都应该有一个可覆盖的 OnDelete() 方法,然后我可以删除所有子类。

如果较新版本的 EF 解决了这个问题,请随意提及,但这不能作为答案,因为该项目锁定在 v4.1 上。

谢谢。

4

1 回答 1

2

有一个部分方法OnContextCreated可用于连接到SavingChanges事件。较新的版本也确实内置了对这种类型的支持。但是,您可以覆盖SaveChanges.DbContext

public partial class MyContext
{
    partial void OnContextCreated()
    {
        SavingChanges += OnSavingChanges;
    }

    private void OnSavingChanges(object sender, EventArgs eventArgs)
    {
        var myEntities = ObjectStateManager.GetObjectStateEntries(EntityState.Deleted)
            .Where(e => e.Entity is MyEntity)
            .Select(e => e.Entity).Cast<MyEntity>();
    }
}
于 2012-07-18T03:43:08.190 回答