如何覆盖Entity Framework中的DeleteObject

时间:2011-09-15 11:48:48

标签: .net entity-framework

嗨,我对EF来说是全新的,我很难解决这个问题。我已经创建了一个项目,并添加了一个edmx图表,我已经用它从预构建的SQL数据库中生成模型。该dame图为每个模型生成了代码,为我创建了一个上下文。上下文类似于:

public partial class BuzzEntities : ObjectContext
{
    public ObjectSet<Case> Cases
    {
        get
        {
            if ((_Cases == null))
            {
                _Cases = base.CreateObjectSet<Case>("Cases");
            }
            return _Cases;
        }
    }

好到目前为止,这允许我做像

这样的事情
private Buzz.BuzzEntities db = new BuzzEntities();
db.Cases.DeleteObject(someCase);

将从数据库中删除someCase。然而,我想要做的是我覆盖删除方法,以便它不是删除对象,而是将对象的属性标记为已删除。即someCase.Delete = true;系统的下一部分是防止系统加载带有deleted = true的案例。基本上我不希望记录被删除只是隐藏在系统中。

最好的方法是什么?我知道我可以手动更改字段并只保存记录而不是调用删除对象但我不想担心在我的UI中设置或隐藏记录我希望框架工作为我处理它。

2 个答案:

答案 0 :(得分:1)

除了@Ladislav建议的选项之外,您还可以为您的表创建INSTEAD OF DELETE触发器,该触发器在数据库服务器级别重新映射删除,或use SavingChanges to alter the state of the object

答案 1 :(得分:0)

您无法覆盖删除操作。您可以创建自定义存储过程和实体的map it to delete operation。问题的第二部分可以通过使用conditional mapping来实现,其中只使用已删除!= true的实体。