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.

Если вы управляете контекстом на более высоком уровне, вы сможете сделать это без проблем.

Другие вопросы по тегам