Entity Framework 4 / POCO - с чего начать? [закрыто]


183

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

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

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

На конкретные вопросы, на которые мне нужно ответить:

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

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

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

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

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


3
будьте действительно ДЕЙСТВИТЕЛЬНО осторожны со временем жизни ваших соединений: bit.ly/fi83NV Это то, что вы должны знать при абстрагировании контекстов в репозитории. Может показаться, что он работает, но на самом деле медленно накапливается все больше открытых соединений
BritishDeveloper

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

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

1
@Basiclife Я столкнулся с той же проблемой :) Я собирался на некоторое время написать свои мысли об обновлении отдельных сущностей, и вы только что призвали меня сделать это: britishdeveloper.co.uk/2011/03/…
BritishDeveloper

Ответы:


56

Эти статьи могут представлять интерес ... серия действительно раскрывает преимущества и недостатки подхода 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 и Unit of Work, но я не могу их найти. Эти статьи хорошо написаны, и я хотел бы прочитать больше от этого автора.


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

1
Если вы ищете единицу работы, она находится по адресу blogs.msdn.com/b/adonet/archive/2009/06/16/…
Майк

11

Я сталкивался с этим: http://blogs.msdn.com/adonet/pages/feature-ctp-walkthrough-code-only-for-the-entity-framework.aspx

Что дает вам шаг за шагом в первую очередь для кода. Это действительно требует CTP 3 для EF4 (Скачать по ссылке из этой статьи).

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


Примечание: этот CTP изначально был для VS2010 Beta, но также поддерживает VS2010 RTM.
Basic

7

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


4

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

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


3

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


3

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

2

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


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

2
Что касается книги Джулии Лерман, то стоит упомянуть, что она работает над вторым изданием, охватывающим EF4 : learnentityframework.com/LearnEntityFramework/book/… . Я помню, что где-то читал, что запланированная дата публикации - май этого года, но я больше не могу найти источник. Также я только что нашел этот сайт: nakedobjects.net/home/index2.shtml
Slauma

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


1

У Юлии Лерман есть прекрасная серия вступительных видеороликов , около 10 минут каждый. Они являются вводными, но есть много практических советов, которые устраняют некоторые потенциальные препятствия для обучения. Мне особенно понравилась ее демонстрация наблюдения за ходом SQL с использованием SQL Server Profiler.


1

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

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

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



0

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

https://entityinterfacegenerator.codeplex.com


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

Ты прав. В основном людям не нужно иметь отдельные интерфейсы. Но это помогает людям, которые хотят решать циклические ссылки и хотят делиться интерфейсами, а не реальными классами, с третьей стороной. Это очень поможет, если вашей компании необходимо пройти аудит с интеграцией сторонних производителей, который не требует детальной реализации при совместном использовании.
Believe2014
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.