Entity Framework 6 с динамической обработкой данных исключает возможность изменения контекста объекта

1

Я хотел бы обрабатывать исключения данных динамической базы данных 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?

  • 0
    Это может помочь TLDR: не похоже, что можно делать то, что вы хотите.
Теги:
entity-framework
asp.net-mvc

1 ответ

0

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.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню