Entity Framework 4 / POCO - з чого почати? [зачинено]


183

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

Я багато читав про інверсію управління, блок роботи, POCO та сховища, і хотів би використовувати цю методологію у своїх нових програмах.

Де я намагаюся знайти чітке, стисле керівництво для початківців для EF4, яке не передбачає знання EF1.

Конкретні запитання, на які мені потрібно відповісти:

Код перший / модель спочатку? Плюси / мінуси щодо EF4 (тобто, що відбувається, якщо я спершу коду, пізніше змінити код і мені потрібно відновити модель БД - чи зберігаються дані, трансформуються або відпадають?)

Якщо припустити, що я переходжу до коду спочатку (я хотів би побачити, як EF4 перетворює це на схему БД), як я насправді розпочну? Досить часто я бачив статті з діаграмами сутності, в яких зазначалося "Отже, це моя модель сутності, тепер я збираюся ..." - На жаль, мені незрозуміло, чи створили модель в дизайнері, зберегли її в генерувати код потім зупиняє будь-яке подальше генерування автоматичного коду - або - вони закодовані (POCO)? класи та якось імпортували їх у подання дейснера?

Я вважаю, що мені справді потрібно зрозуміти, звідки походить "магія", і як її додати, якщо я не просто генерую модель EF безпосередньо з БД.

Мені відомо, що питання трохи розпливчасте, але я не знаю, що не знаю - тому будь-який вклад / виправлення / уточнення оцінено.

Потрібно сказати, що я не сподіваюся, що хтось тут буде сидіти і навчати мене EF - я просто хотів би якісь хороші підручники / форуми / блоги / тощо. для повних початківців юридичних осіб


3
будьте дійсно обережні з терміном експлуатації ваших зв’язків: bit.ly/fi83NV Це те, про що ви дійсно повинні знати, абстрагуючи контексти в сховищах. Це може здатися спрацьовим, але насправді повільно відбувається все більш відкриті зв'язки
BritishDeveloper

@BRitishDeveloper - Дуже хороша порада. Це насправді нас вигнало, але навпаки. Ми використовували контейнер IoC для отримання сховищ і виникли проблеми, коли контекст, призначений для сховища, закриватиме з'єднання через тривалий час, але не позначається як видалений / подібний. Ми врешті-решт розширили контекст самим IsDisposed (), який перевірив звичайний стан утилізації та стан з'єднання, що дозволить нам побудувати інший, якщо потрібно.
Основні

Ще одна підказка полягає в тому, що при отриманні нового контексту об’єкти, пов’язані зі старим контекстом, не матимуть відповідного відстеження змін і спричинять проблеми невідповідності контексту. Тож якщо у вас є давно запущена програма та змініть контекст у середині, Виконання, вам потрібно відновити всі ваші сутності. Щоб зробити це цікавіше, нам насправді довелося мати 2 бічні місця часом і, нарешті, писати якийсь код, щоб зробити карту між двома красиво ...
Основний

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. асп

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

У цих статтях автор згадує майбутні статті, які описують найкращі практики впровадження моделей сховищ та підрозділів, але я не можу їх знайти. Ці статті добре написані, і я хотів би прочитати більше від цього автора.


2
Оскільки хтось уже любив Entity Framework користуватися дизайнером, це було чудовим вступом у POCO.
nathanchere

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.
Основні

7

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


4

Це велике питання, але важко бути в курсі того, як Entity Framework продовжує дозрівати. Напевно, найкращим місцем для початку, що буде в курсі майбутнього, є сторінка EF на Microsoft .

Кілька інших посилань, які мені здалися корисними під час Гуглінга (орієнтований на Code First):


3

Ви можете взяти книгу Лермана або щось простіше, наприклад "Pro linq об'єктно-реляційне відображення". Усі концепції все ще однакові з POCO, за винятком того, що тепер ви повинні відключити генерацію коду та перейти безпосередньо до своєї моделі в edmx csdl (або створити власний генератор POCO). Усі принципи відображення також однакові. У будь-якому разі ви працюєте з проксі, який походить від вашого об'єкта POCO, тому вам слід потурбуватися про підтримку перехоплення (віртуалізація ваших властивостей POCO).


3

Його структура проекту схожа на старий проект на базі гібернації, над яким я працював. Приймаю весь джаз WCF, який я дуже хочу освіжити. Суцільне посилання.
Меррітт

2

Ось покрокове керівництво по POCO Шаблон для Entity Framework , який виглядав досить добре. Ви також можете перевірити блог команди ADO.NET . Якщо ви хочете почати спочатку (EF v1.0) як базу для ваших знань про EF, я вважаю, що книга Юлії Лерман " Рамкова програма програмного забезпечення" дуже повною.


Дякую - я не бачив книги, але я прочитав обидва надані посилання. Посібник із шаблоном корисний для пояснення того, як додаткові функціональні можливості можна додати до об'єктів POCO, коли вони визначені (наприклад, ледача завантаження), але (і я можу пропустити щось очевидне тут), вона насправді не пояснює, як почати роботу (тобто просто створення класу, як зазначено, не робить його об'єктом і не пов'язує його з моделлю) У мене був аналогічний досвід роботи з блогом. Я хотів би розглянути можливість отримання книги - Це виглядає перспективно - Дякую.
Основні

2
Стосовно книги Джулії Лерман варто зазначити, що вона працює над другим виданням, що висвітлює EF4: learnnentityframework.com/LearnEntityFramework/book/… . Я пам’ятаю, що десь читав, що запланована дата публікації - у травні цього року, але я вже не можу знайти джерело. Також я щойно знайшов цей сайт: nudeobjects.net/home/index2.shtml
Slauma

Слаума, надане вами посилання виглядало саме те, що мені потрібно - за винятком використання третьої сторони бібліотеки "Голі обереги", яка, здається, якось обтяжує складність - На хвилину я подумав, що ти її зламав
Основний


1

У Джулії Лерман є приємна серія вступних відео , приблизно 10 хвилин у кожному. Вони вступні, але є безліч практичних порад, які позбавлять вас від потенційних навчальних блоків. Мені особливо сподобалась її демонстрація перегляду фактичного запуску SQL за допомогою програми SQL Server Profiler.


1

Якщо ви збираєтесь використовувати відключені канарі, рекомендую прочитати книгу Джулі Лерман: "Програмування DbContext", у спеціальній главі 4.

Я знайшов чимало прикладів у блогах тощо, але майже всі вони стосуються підключених cenarios.

Я теж починаю. і ці книги мені дуже допомогли. До речі, я купив їй три книги.



0

Нічого собі, багато відповідей. Як щодо прикладу, який містить налаштовану версію шаблонів T4, яка взагалі генерує POCO + інтерфейси + сховища?

https://entityinterfacegenerator.codeplex.com


Цікаво і зручно для тестування сховищ / контекстів, але навіщо вам потрібно абстрагувати самі сутності? За визначенням вони не повинні мати жодного функціонального коду всередині себе.
Основні

Ви праві. Здебільшого людям не потрібно мати окремих інтерфейсів. Але це допомагає людям, які хочуть вирішувати кругові посилання та хочуть ділитися інтерфейсами, а не власне класами, з третьою стороною. Це дуже допоможе, якщо вашій компанії потрібно пройти аудит за допомогою інтеграції третьої сторони, яка не потребує детальної реалізації в обміні.
Повірте2014
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.