我有一个实体,我们称它为CommonEntity,它的主键在许多其他实体中用作外键。随着应用程序的开发,这些链接将继续增长。

我想知道一种方法CommonEntity是否可以安全删除(即其他任何实体均未使用)。

我知道我能做

if(!ce.EntityA.Any() && !ce.EntityB.Any() ... && !ce.EntityN.Any())
{
   //Delete
}

但我希望有一种方法可以自动检查所有关系,因为我不喜欢每次添加新关系时都必须手动返回并更改此代码的想法。也许EF4 +中有些我不知道的东西?

我认为可以使用事务作用域来尝试删除该对象并在失败时将其回滚,但是我不确定这种方法是否有任何不利的副作用。

有没有更好的方法?

编辑:即使项目是.Net 4,VS2012看起来也已使用EF5,因此即使它是从数据库生成的,它也已使用POCO创建了模型。

最佳答案

只是让它失败。如果实体有很多关系,那么该验证可能会很繁琐。

public bool TryDelete(int id)
{
    try
    {
        // Delete
        return true;
    }
    catch (SqlException ex)
    {
        if (ex.Number == 547) return false; // The {...} statement conflicted with the {...} constraint {...}
        throw; // other error
    }
}

10-06 05:24
查看更多