Как мне получить Entity Framework только для обновления свойств, измененных в сгенерированном SQL? - PullRequest
7 голосов
/ 10 сентября 2010

Я использую Entity Framework с шаблонами Self-Tracking Entity T4, которые по умолчанию генерируют запрос SQL, задающий все свойства объекта в выражении UPDATE. Я хочу только оператор UPDATE, который содержит измененные свойства.

Я изменил шаблон T4, как указано в книге: Рецепты Entity Framework: подход к решению проблемы стр. 503.

Я изменил эту строку в шаблоне T4:

OriginalValueMembers originalValueMembers = new OriginalValueMembers(false, metadataWorkspace, ef);

Заставить сущность отслеживать каждое изменение свойства, а не просто отслеживать, что сущность изменилась.

А также

context.ObjectStateManager.ChangeObjectState(entity, EntityState.Unchanged);

После внесения этих изменений я получил желаемый результат оператора SQL только с измененными значениями / свойствами в операторе UPDATE. Однако был странный побочный эффект. При обновлении обнуляемого свойства INT с нуля до значения, отличного от нуля, его изменение игнорировалось Entity Framework. Модели самообследования показывают изменение в ChangeTracker с точным нулем OriginalValue, но когда Entity Framework попыталась сгенерировать UPDATE SQL, оно не увидело, что это свойство изменилось, если исходное значение пусто, а новое значение не равно нулю. Я работал, если исходное значение не было нулевым и значение изменилось.

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

У кого-нибудь есть идеи?

1 Ответ

1 голос
/ 06 декабря 2010

Если полезно, нашел сообщение, которое исправляет это: исправлено обновление столбца, допускающего обнуление .

...