EF CTP5 какой элемент генерации кода выбрать?
С EF 4.1 в пути и CTP5 доступны в течение нескольких месяцев, я решил опробовать новую функциональность. Как я вижу, доступно несколько предметов поколения (DbContext
и три разных ObjectContext's
). Я также заметил, что они не являются взаимозаменяемыми - я впервые использовал POCO ObjectContext в одном из моих приложений, а сегодня переключился на DbContext, и весь мой репозиторий сломался. Это было основано на LoadProperty()
методы, DeleteObject()
а также AddObject()
методы и те, которые отсутствуют на DbSet
класс, который используется в DbContext
поколение.
Я знаю, что здесь есть отличная серия блогов http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx представляет новую функциональность, но никогда не говорит, когда выбирать что.
Мои требования:
- Приложение ASP.NET MVC, поэтому отложенная загрузка в большинстве случаев не работает, так как при рендеринге страницы будет сказано, что контекст уже удален (поэтому мне нужна легкая поддержка явной загрузки - в EF4 я делал это через
Include()
, используя контекст POCO, я сделал это черезLoadProperty()
а теперь вDbContext
Я верю, что буду использовать строго типизированныйInclude()
). - Нам, вероятно, не понадобятся функции, запускающие код (но вы никогда не узнаете).
2 ответа
Разница между этими двумя заключается в основном в API и наборе функций. DbContext
конечно есть Include
для запроса и Load
но вы найдете это в другом месте. Более того, при использовании сборки CTP5 у вас будет строгий тип Include
для обоих ObjectSet
а также DbSet
( доступно на интерфейсе IQueryable как метод расширения).
Явная загрузка (эквивалентно LoadProperty
) выполняется Load
метод на DbReferenceEntry<T>
или же DbCollectionEntry<T>
- проверить явную загрузку связанных сущностей. Это работает даже лучше, чем LoadProperty
потому что вы можете определить фильтр для загрузки.
Вы начинаете с неверного предположения, что вы не можете использовать ленивую загрузку с MVC.
Если вы управляете контекстом на более высоком уровне, вы сможете сделать это без проблем.