В чем разница между этими двумя утверждениями (Entity Framework) - PullRequest
5 голосов
/ 28 февраля 2012

Кто-нибудь знает разницу, если таковые имеются, следующих утверждений?

_context.AddObject(user);

_context.Users.AddObject(user);

, а также

_context.Attach(user);

_context.Users.Attach(user);

Спасибо

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

Извините за некоторую путаницу:

Я знаю разницу между AddObject и Attach, я имел в виду, есть ли разница в том, как вы используете AddObject, т.е.

_context.AddObject(user);
_context.Users.AddObject(user);

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

ObjectContext может иметь несколько наборов с одной и той же схемой, поэтому обычно лучше использовать явный набор. т.е. _context.Users.AddObject(user);

С MSDN :

В .NET Framework версии 4 мы рекомендуем использовать методы на объект ObjectSet для создания, чтения, удаления, прикрепления и Операции обновления. ObjectSet происходит от ObjectQuery, поэтому он также работает как объект запроса.

В версиях, начиная с .NET Framework версии 4, вы можете использовать следующие методы, определенные в ObjectSet вместо эквивалентных определено в ObjectContext:

 AddObject   
 Attach
 ApplyCurrentValues
 ApplyOriginalValues
 DeleteObject
 Detach
0 голосов
/ 28 февраля 2012

Есть простая разница, потому что ваши примеры неверны. Это не

context.AddObject(user) 

но

context.AddObject("UserEntitySet", user)

Если вы используете AddObject или Attach непосредственно в контексте, вы должны указать контексту, какой набор вы хотите добавить или присоединить ваш объект, если вы используете реализацию непосредственно в ObjectSet, эта информация уже сильно упакована. набранный способ.

ИМХО эти методы существуют только в качестве обратной совместимости с EFv1 (.NET 3.5 SP1), где ObjectSet не существовало.

0 голосов
/ 28 февраля 2012

MSDN ответ

Резюме:

AddObject устанавливает состояние объекта на Added, Attach устанавливает его на Unchanged. Если после этого вы вызовете метод SaveChanges(), контекст попытается вставить объект, добавленный AddObject, в хранилище, а объект, добавленный Attach, будет считаться неизменным, и никакие действия для него не будут выполняться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...