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

C# 具有动态数据句柄的实体框架6数据库异常覆盖对象上下文保存更改,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我想在EF6中处理asp.net动态数据数据库异常 所以我决定实现下面的示例,在动态数据页面上显示错误 public partial class MyCustomDataContext : DbContext{ public override int SaveChanges() { try { base.SaveChanges(); } catch(Exception) {

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

所以我决定实现下面的示例,在动态数据页面上显示错误

public partial class MyCustomDataContext : DbContext{
  public override int SaveChanges()
    {
        try
        { 
            base.SaveChanges();
        }
        catch(Exception)
        {
            throw ValidationException(null, "My message");
        }
}
问题是,当我单击“在动态数据中保存”时,我没有转到我的重写函数。我在net中发现,用于保存更改的动态数据使用DbContext的底层ObjectContext


因此,我的问题是,当我获取UpdateExcetpion时,我如何重写ObjectContext SaveChanges方法以显示用户自定义错误消息?

好的,我已经测试了这一点,并告诉Asp.Net团队,问题是EF数据源实际上仍然使用ObjectContext,方法是展开DbContext以获取ObjectContext,从而获取ObjectContextSaveChanges override never get调用您需要做的是:

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上下文的方式进行操作

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

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

TLDR:似乎不可能做你想做的事情。