2010-03-19 2 views
180

Я некоторое время программировал и раньше использовал LINQ-To-SQL и LINQ-To-Entities (хотя при использовании сущностей он был связан с отношением Entity/Table 1-1, т.е. не сильно отличается от L2SQL)Entity Framework 4/POCO - С чего начать?

Я много читал об обращении с элементами управления, модулем работы, POCO и образцами репозитория и хотел бы использовать эту методологию в своих новых приложениях.

Где я пытаюсь найти четкое, краткое руководство для начинающих для EF4, которое не предполагает знания EF1.

конкретных вопросов, мне нужны ответы являются:

кода первого/моделью первым? Плюсы/минусы в отношении EF4 (то есть, что произойдет, если я сначала сделаю код, измените код на более позднюю дату и вам нужно будет восстановить мою модель БД - Сохраняются ли данные и преобразуются или удаляются?)

Предполагая, m, идущий кодовым первым (я хотел бы видеть, как EF4 преобразует это в схему БД), как я действительно начинаю? Довольно часто я видел статьи с диаграммами сущностей, в которых говорится: «Итак, это моя модель сущности, теперь я собираюсь ...» - К сожалению, я не понимаю, была ли она создана модель в дизайнере, сгенерировать код, а затем прекратить любое дальнейшее генерирование автоматического кода -или- Они закодированы (POCO)? классы и как-то импортировали их в представление deisgner?

Я полагаю, что мне действительно нужно понять, откуда приходит «волшебство» и как его добавить, если я не просто создаю EF-модель непосредственно из БД.

Я знаю, что вопрос немного расплывчатый, но я не знаю, чего я не знаю, - поэтому любой ввод/коррекция/разъяснение оцениваются.

Излишне говорить, что я не ожидаю, что кто-нибудь сядет здесь и научит меня EF - мне бы хотелось, чтобы некоторые хорошие учебники/форумы/блоги/и т. Д. для новичков полного состава

+3

быть действительно очень осторожен с временем жизни подключений: http://bit.ly/fi83NV Это то, что вы действительно должны быть осведомлены о том, когда абстрагированиях контекстов в хранилища. Может показаться, что он работает, но на самом деле медленно работает все больше открытых подключений. – BritishDeveloper

+0

@BRitishDeveloper - Очень хороший совет. Это действительно нас выводило, но наоборот. Мы использовали контейнер IoC для извлечения репозиториев и имели проблему, когда контекст, назначенный репозиторию, закроет соединение через некоторое время, но не будет помечен как удаленный/аналогичный. В конечном итоге мы расширили контекст с помощью IsDisposed(), который проверен с обычным состоянием удаления и состоянием соединения, что позволяет нам строить другое, если это необходимо. – Basic

+0

Другим удобным советом является то, что при получении нового контекста объекты, связанные со старым контекстом, не будут иметь соответствующего отслеживания изменений и вызовут проблемы с неправильным сопоставлением контекста. Поэтому, если у вас есть долгосрочное приложение и контекст изменения в середине -execution, вам нужно повторно получить все ваши сущности. Чтобы сделать его более интересным, нам на самом деле приходилось работать 2 одновременно и бок о бок, и в итоге я написал код для сопоставления между двумя красивыми ... – Basic

ответ

55

Эти статьи могут быть интересны ... серия действительно попадает в преимущества и недостатки подхода POCO.

http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

http://blogs.msdn.com/b/adonet/archive/2009/05/28/poco-in-the-entity-framework-part-2-complex-types-deferred-loading-and-explicit-loading.aspx

http://blogs.msdn.com/b/adonet/archive/2009/06/10/poco-in-the-entity-framework-part-3-change-tracking-with-poco.aspx

В этих статьях автор упоминает будущие статьи, описывающие лучшие практики реализации Repository и блок шаблонов работы, но я не могу их найти. Эти статьи хорошо написаны, и я хотел бы прочитать больше от этого автора.

+2

Как кто-то уже удобно с Entity Framework с помощью дизайнера, это было отличное введение в POCO. – nathanchere

+1

Если вы ищете блок управления работой, он находится по адресу http://blogs.msdn.com/b/adonet/archive/2009/06/16/using-repository-and-unit-of-work-patterns- with-entity-framework-4-0.aspx – Mike

2

Вот walkthrough на шаблоне POCO для платформы Entity, которая выглядела довольно хорошо. Вы также можете проверить ADO.NET team blog. Если вы хотите начать с начала (EF v1.0) в качестве базы для ваших знаний EF, я нашел книгу Julia Lerman's Programming Entity Framework очень полной.

+0

Спасибо - я не видел книгу, но я прочитал обе предоставленные ссылки. Пошаговое руководство по шаблону полезно в объяснении того, как дополнительные функции могут быть добавлены к объектам POCO после их определения (например, Lazy loading), но (и, возможно, мне не хватает чего-то очевидного здесь), на самом деле это не объясняет, как начать работу (т.е. просто создание класса, как указано, не делает его сущностью и не связывает его с моделью) У меня был подобный опыт работы с блогом. Я подумаю о том, чтобы получить книгу, хотя это выглядит многообещающе. Спасибо. – Basic

+2

Что касается книги Юлии Лерман, стоит упомянуть, что она работает над вторым изданием, охватывающим EF4: http://learnentityframework.com/LearnEntityFramework/book/here-i-go-again-programming-entity-framework-2nd -edition-for-ef4 /. Я помню, что где-то читал, что запланированная дата публикации - в мае этого года, но я больше не могу найти источник. Также я нашел этот сайт: http://www.nakedobjects.net/home/index2.shtml – Slauma

+0

Slauma, ссылка, которую вы указали, выглядела точно так, как мне нужно, за исключением использования сторонней библиотеки «Голые Obects», которая кажется как-то запутывать сложность - на минуту я думал, что вы ее взломали – Basic

3

Вы можете взять книгу Лермана или нечто более простое, как «объектно-реляционное сопоставление Pro linq». Все концепции остаются неизменными с POCO, за исключением того, что теперь вы должны отключить генерацию кода и сопоставить его непосредственно с вашей моделью в edmx csdl (или создать собственный генератор POCO). Все принципы сопоставления одинаковы. Во всяком случае во время выполнения вы работаете с прокси-сервером, который является производным от вашего объекта POCO, поэтому вы должны заботиться о поддержке перехвата (виртуализация ваших свойств POCO).

11

Я пришел через это: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

, который дает вам шаг за шагом для кода первого. Для этого требуется CTP 3 для EF4 (Загрузить ссылку из этой статьи).

Это довольно близко к тому, что я был после того, как (хотя в идеале решение, которое не опирается на CTP был бы предпочтительнее)

+0

NB: этот CTP был первоначально для бета-версии VS2010, но также поддерживает VS2010 RTM. – Basic

7

Я рекомендую вам взять полчаса или так и генерировать стабильная модель EF1.0 в вашем текущем VS. Это даст вам долгий путь к пониманию метафор и концепций EF 4.0. Просто взломайте простой клиент, продукты и заказы db ... Я рекомендую делать свое и не использовать Northwind.

3
+0

Его структура проекта выглядит так же, как старый проект на основе nHibernate, над которым я работал. Умело за весь джаз WCF, который я увлекаюсь обновлением. Сплошная ссылка. – Merritt

1

Julia Lerman имеет a nice series of introductory videos, около 10 минут каждый. Они вводятся, но есть много практических советов, которые помогут избежать потенциальных препятствий для обучения. Мне особенно понравилась ее демонстрация того, как смотреть SQL-сервер с помощью SQL Server Profiler.

4

Это отличный вопрос, но он неустойчив, так как Entity Framework продолжает созревать. Вероятно, лучшее место для начала, которое будет оставаться в курсе будущего, - Microsoft's EF page.

Несколько других ссылок я нашел полезным во время погуглить (сосредоточены на Code First):

1

Если вы собираетесь использовать разъединение ed cenarios, я рекомендую вам прочитать книгу Джули Лерман: «Программирование DbContext», в специальной главе 4.

Я нашел много примеров в блогах и т. д., но почти все они связаны с связанными сценариями.

Я тоже начинаю. и эта книга мне очень помогла. Кстати, я купил ей три книги.

0

Ничего себе, много ответов. Как насчет примера, который содержит измененную версию шаблонов T4, которые генерируют интерфейсы POCO + + репозитории?

https://entityinterfacegenerator.codeplex.com

+0

Интересно и удобно для тестирования репозиториев/контекстов, но зачем вам абстрагироваться от самих объектов? По определению у них не должно быть функционального кода внутри них. – Basic

+0

Вы правы. В основном, людям не нужно иметь отдельные интерфейсы. Но это помогает людям, которые хотят решать круговые ссылки и хотят делиться интерфейсами, а не с фактическими классами, с третьей стороной. Это очень поможет, если вашей компании необходимо пройти аудит с сторонней интеграцией, которая не требует детальной реализации при совместном использовании. – Believe2014

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

  • Нет связанных вопросов^_^