Entity Framework 4 - AddObject vs Attach

Я недавно работал с Entity Framework 4 и немного не понимаю, когда использовать ObjectSet.Attach и ] ObjectSet.AddObject .

Насколько я понимаю:

  • Используйте «Присоединить», когда сущность уже существует в системе
  • Используйте «AddObject» при создании нового объекта

Итак, если я создаю нового человека , я делаю это.

var ctx = new MyEntities();
var newPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.AddObject(newPerson);
ctx.SaveChanges();

Если я изменяю существующее лицо , я делаю это:

var ctx = new MyEntities();
var existingPerson = ctx.Persons.SingleOrDefault(p => p.Name = "Joe Bloggs" };
existingPerson.Name = "Joe Briggs";
ctx.SaveChanges();

Имейте в виду, это очень простой пример. На самом деле я использую Pure POCO (без генерации кода), шаблон репозитория (не работайте с ctx.Persons) и Unit of Work (не работайте с ctx.SaveChanges). Но «под прикрытием», это то, что происходит в моей реализации.

Теперь мой вопрос - мне еще предстоит найти сценарий, в котором мне пришлось бы использовать Attach .

] Что мне здесь не хватает? Когда нам нужно использовать Attach?

EDIT

Чтобы прояснить, я ищу примеров того, когда использовать Attach поверх AddObject (или наоборот).

РЕДАКТИРОВАТЬ 2

Приведенный ниже ответ правильный (который я принял), но подумал, что добавлю еще один пример, в котором будет полезно Attach.

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

Один для получения Person (.SingleOrDefault), а другой для выполнения UPDATE (.SaveChanges).

Если (по какой-то причине), я уже знал, что "Joe Bloggs" "существует в системе, зачем делать дополнительный запрос, чтобы получить его первым?" Я мог бы сделать это:

var ctx = new MyEntities();
var existingPerson = new Person { Name = "Joe Bloggs" };
ctx.Persons.Attach(existingPerson);
ctx.SaveChanges();

Это приведет к выполнению только оператора UPDATE.

128
задан RPM1984 13 October 2010 в 03:07
поделиться