EF5:如何更改默认删除功能来实现自己的 [英] EF5: How to alter the default Delete function to implement my own

查看:108
本文介绍了EF5:如何更改默认删除功能来实现自己的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗯,这里是我的情况:

我们有我们不希望曾经删除的数据表。有一种被称为请将isDeleted列应该是代替更新删除它,而不是

We have tables that we dont want ever to delete the data. There is a column which is called isDeleted that is supposed to be updated instead instead of deleting it.

我想发展同EF5伴随Web应用程序,但我有一个问题。我如何实施该限制?

I want to develop the accompanying web app with EF5 but i have a problem there. How do i implement that restriction?

我可以使用存储过程来删除和选择,但我希望的方式来使用标准功能EF,只是改变它们的工作原理。哪种方式不太繁重,我有什么办法来实现我想要什么,因为i'm猜我可不是要问这个的第一人?

I could use stored procedures to delete and select but i was hoping for a way to use the standard functions in EF, just changing how they work. Which way is less arduous and what options i have to achieve what i want, since i´m guessing i´m not the first person to ask for this?

推荐答案

您可以覆盖你的DbContext的SaveChanges方法。例如。要禁止删除产品。您可以保存与实体请将isDeleted标志设置,而不是删除它们设置为true:

You can override SaveChanges method of your DbContext. E.g. you want to forbid deleting products. You can save entities with IsDeleted flag set to true instead of deleting them:

public override int SaveChanges()
{
    var deletedPersonEntries = ChangeTracker.Entries<Person>()
                                    .Where(e => e.State == EntityState.Deleted);

    foreach (var e in deletedPersonEntries)
    {
        e.State = EntityState.Unchanged;
        e.Entity.IsDeleted = true;
    }

    return base.SaveChanges();
}

另一种选择 - 引发异常,如果有人试图删除产品:

Another option - raise exception if someone tries to delete product:

if (deltedProductEntries.Any())
    throw new Exception("You should not delete products!");

您也可以简单地设置实体状态来改变,但我不认为它很好的解决方案。

You also can simply set entities state to unchanged, but I don't think its very good solution.

这篇关于EF5:如何更改默认删除功能来实现自己的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆