Я хотел бы обрабатывать исключения данных динамической базы данных asp.net в EF6.
Поэтому я решил сделать это, как пример ниже (чтобы показать ошибку на странице динамических данных).
public partial class MyCustomDataContext : DbContext{
public override int SaveChanges()
{
try
{
base.SaveChanges();
}
catch(Exception)
{
throw ValidationException(null, "My message");
}
}
Проблема в том, что я, когда я нажимаю save в динамических данных, не перехожу к моей функции overriden. Я нашел в сети, что динамические данные для сохранения изменений используют DbContext, лежащий в основе ObjectContext.
Поэтому мой вопрос в том, как я могу переопределить этот метод ObjectContext SaveChanges, чтобы показать пользовательское сообщение об ошибке при получении UpdateExcetpion?
OK Я протестировал это и поговорил с командой 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 и использовать
Регистрация и перехват операций с базой данных
Благодаря Роуэну и Пранаву из команд EF и Asp.net.