WPF и EF6 обозначают модель объекта как имеющие chnages

.net entity-framework entity-framework-6 vb.net wpf

Вопрос

Предпосылки: У меня есть приложение wpf 4.5, которое создано с MVVM (MVVM-Light) и Enitity Framework 6 db.

У меня есть несколько режимов просмотра, в которых есть список / детали, настроенные со списком объектов в списке и сеткой данных, которая отображает и позволяет пользователю редактировать выбранную запись в списке. У меня есть кнопка SAVE и UNDO в верхней части сетки, которую я хочу «включить», когда есть изменения в основной модели объекта выбранной записи.

Я могу это сделать, но производительность моего текущего решения ужасна, и мне нужна новая стратегия для обнаружения изменений в моей модели.

Что у меня сейчас:

У меня есть метод CanSaveExecute, который является обратным вызовом CanExecute объекта ICommand. В этом методе я запрашиваю объекты EF dbContext ChangeTracker, чтобы увидеть, имеются ли какие-либо объекты моего желаемого типа.

 Try
    If _Selection IsNot Nothing AndAlso _Selection.HasErrors = False Then
         Return (From entry In Context.ChangeTracker.Entries(Of job)() Where entry.Entity.idJob = _Selection.idJob And entry.State = EntityState.Modified Select entry).Count
    Else
         Return False
    End If
 Catch ex As Exception
    Return False
 End Try

Проблема в том, что этот запрос записей отслеживания изменений разрушает производительность пользовательского интерфейса. Это вызывает серьезное отставание от пользовательского ввода.

Мой вопрос:

У кого-то есть лучшая стратегия для обнаружения изменений в методе CanExecute с Entity Framework 6? Предпочтительно, не меняя кодека T4 (но я чувствую, что это то, где я закончу).


Более детально:

Вот как моя модель настроена. EF6 генерирует для меня простой класс сущностей, который выглядит так (я удалил много свойств, чтобы упростить его в качестве примера) :

 Try
    If _Selection IsNot Nothing AndAlso _Selection.HasErrors = False Then
         Return (From entry In Context.ChangeTracker.Entries(Of job)() Where entry.Entity.idJob = _Selection.idJob And entry.State = EntityState.Modified Select entry).Count
    Else
         Return False
    End If
 Catch ex As Exception
    Return False
 End Try

Я расширяю этот класс с помощью другого частичного класса, чтобы добавить такие правила передачи данных (например, упрощенные) :

 Try
    If _Selection IsNot Nothing AndAlso _Selection.HasErrors = False Then
         Return (From entry In Context.ChangeTracker.Entries(Of job)() Where entry.Entity.idJob = _Selection.idJob And entry.State = EntityState.Modified Select entry).Count
    Else
         Return False
    End If
 Catch ex As Exception
    Return False
 End Try

Нет решения:

Поэтому, сражаясь с ним в течение дня, я решил, что @Shoe прав. Это оказалось слишком большой работой для этой функции. Я никогда не мог позвонить в трекер изменений, чтобы не вызывать отставание в пользовательском интерфейсе.

Популярные ответы

Я просто не вижу никаких преимуществ для изменений, внесенных MS в Entity Framework. Классы больше не поддерживают отслеживание изменений и запросы, если есть изменения, во много раз медленнее, чем использование dbcontext. Хотелось бы, чтобы они задокументировали все эти изменения, поэтому я бы не потратил столько времени, пытаясь заставить это работать.

Кстати, если я использую viewmodel и скажу, что у меня есть объект продукта с шестьюдесятью полями. Как изменения в этих полях возвращаются к модели?




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему