【问题标题】:How do I override DeleteObject in Entity Framework如何在实体框架中覆盖 DeleteObject
【发布时间】:2011-09-15 11:48:47
【问题描述】:

您好,我对 EF 完全陌生,我很难理解它,但这是场景。我创建了一个项目并添加了一个 edmx 图,我用它从预建的 SQL 数据库生成模型。该圣母图为每个模型生成了代码,并为我提供了一个上下文。上下文看起来像:

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。但是,我想做的是覆盖 delete 方法,以便它不会删除对象,而是将对象的属性标记为已删除。即 someCase.Delete=true;系统的下一部分是防止系统加载已删除=true 的案例。基本上我不希望删除的记录只是从系统中隐藏。

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

【问题讨论】:

    标签: .net entity-framework


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2013-07-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多