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.