2010-09-13 2 views
2

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

myobj.Name = "textbox value"; 
myobj.Content = "textbox content"; 

Но имя не может быть изменен, он может только изменение текстового поля содержимого.

Проблема заключается в том, что инфраструктура entity рассматривает имя как измененное только потому, что я установил его значение, независимо от того, установлен ли я точно так же, как и нет.

В идеале, я бы хотел, чтобы EF отмечал только те вещи, которые были изменены, если они действительно изменились. Это возможно?

ответ

2

Какую версию EF вы используете?

Попробуйте это - перейти к определению имени свойства в сущности, и имеет ли он чек это сеттер, как:

set 
{ 
    if (Name != value) 
    ... 
} 

Если это не так, изменить шаблоны t4 (если вы» повторное использование EF 4.0) и добавить вручную.

В противном случае, я не думаю, что существует дешевый способ «неизменности» измененного имущества.

Редактировать: Чтобы создать T4 из уже существующей модели, нажмите правой кнопкой мыши вашу модель, выберите Add code generation items и выберите EntityObject generator. Это создаст файл tt, который вы можете запустить, выпустив команду сохранения (вы получите приглашение, если вы хотите разрешить его запуск). При сохранении он будет генерировать файл, который точно такой же, как файл, созданный с помощью модели edmx. Теперь вам просто нужно найти часть, где она генерирует свойство set. Tt может быть пугающим с первого взгляда, но он действительно окупает его изучение ... есть расширение для окраски текста t4 - вы можете найти его в диспетчере расширений, и это бесплатно.

+0

Модель, которую я сейчас нахожу в базе данных, не имеет шаблонов T4 (насколько мне известно). Это EF4.0, но у него нет if (Name! = Value) - который выглядит идеально! – Paul

+0

Я отредактировал свой ответ, чтобы показать, как создать файл t4. – veljkoz

Смежные вопросы