具有动态数据处理数据库异常的实体框架6覆盖对象上下文保存更改

时间:2015-04-05 18:49:19

标签: c# asp.net-mvc entity-framework

我想在EF6中处理asp.net动态数据数据库异常。

所以我决定像下面的示例一样实现(在动态数据页面上显示错误)。

public partial class MyCustomDataContext : DbContext{
  public override int SaveChanges()
    {
        try
        { 
            base.SaveChanges();
        }
        catch(Exception)
        {
            throw ValidationException(null, "My message");
        }
}

问题在于,当我单击动态数据中的保存时,我不会转到我的覆盖功能。我在网上发现保存更改的动态数据使用DbContext的底层ObjectContext。

所以我的问题是,当我获得UpdateExcetpion时,如何覆盖ObjectContext SaveChanges方法以显示用户自定义错误消息?

1 个答案:

答案 0 :(得分:0)

好的我已经对Asp.Net团队进行了测试并告诉我们,EF DataSource实际上仍然使用ObjectContext来解开DbContext来获取ObjectContext,因此SaveChanges覆盖永远不会被调用你需要的东西做的是:

public partial class NorthwindEntities : DbContext
{
    public NorthwindEntities()
        : base("name=DataModel")
    {
        ((IObjectContextAdapter)this).ObjectContext.SavingChanges += ObjectContext_SavingChanges;
    }

    private void ObjectContext_SavingChanges(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

因此,在此SavingChanges事件中,您需要以Objwect Context方式执行操作。

要包装错误,您需要使用EF6.x并使用

Logging and Intercepting Database Operations

感谢EF和Asp.net团队的Rowan和Pranav。