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

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

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

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

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

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

А также

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

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

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

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

7
задан John Egbert 10 September 2010 в 19:07
поделиться