我想在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方法以显示用户自定义错误消息?
答案 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。