Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Вопрос по Entity Framework


Автор: ДобренькийПапаша 30.4.2011, 17:37
Вот прочитал сейчас введение в Entity Framework у Троелсена.
Вопрос у меня такой - если у меня есть проект, в проекте куча окошек, в каждом окошке осуществляется доступ к различным таблицам (как правило у меня тут одно окно - одна таблица) одной и той же базы данных, то мне при генерации edm-файла указывать сразу все таблицы? Короче говоря, как чаще всего делают - генерят один edm на всё приложение или несколько разных?

Автор: jonie 30.4.2011, 17:48
имхо один. Вообще вся эта хрень с генерацией настоящий *****ц  на чуть более крупном проекте, чем Hello word. Незря все сейчас молятся на EF CodeFirst - там этот адЬ залит в классы и его особо не видно.

У меня вот есть модель с 400 таблицами... я ее даж отредактировать в дизайнере не могу... так-то.

Автор: ДобренькийПапаша 30.4.2011, 17:56
jonie, у EF есть какие-то серьёзные недостатки? И можно ссылку на этот ваш Code First, чтобы узнать что это, а то я пробил - и вот так вот сразу ничего не нашёл хорошего.

Автор: jonie 30.4.2011, 18:00
EFCodeFirts еще не вышел, разве что в составе EF Feature CTP5 (будущем EF5).
Серъезный недостаток генератора по умолчанию это генерация сильносвязанных сущностей с DataContext-ом. Это всё невидно когда у вас клиент-серверное приложение, а не классическая 3-х звенка. Но как только вы переходите грань к 3-х звенному программированию, то эта связь начинает начисто ломать принципы SOA.

Да, есть генераторы POCO сущьностей для EF4 (в онлайне найти можно), но у них тоже есть ограничения.

Автор: ДобренькийПапаша 30.4.2011, 18:08
Цитата(jonie @  30.4.2011,  18:00 Найти цитируемый пост)
Но как только вы переходите грань к 3-х звенному программированию, то эта связь начинает начисто ломать принципы SOA.


А почему? В чём будет разница? Сразу не пойму.

Автор: jonie 30.4.2011, 18:21
Ну многие очень людят отождествлять модель и бизнес модель. Модель это то что нам нагенерирует EF, в то время как бизнес модель - это те объекты, которыми мы должны обмениваться между клиентом и сервером (например по WCF).

Если мы не различаем эти понятия, то проброс EF сущностей через например WCF нарушает принципы SOA, т.к. кроме собственно field-ов через сеть будет пробрасываться мета информация о Entity (например ObjectContext).

В общем и целом - проброс по сети EF это плохая идея.

Но готовые классы так манят...

Обычно делают свои классы (DTO) без всякого мусора, которые мапят на EF сущноси и расширяют как надо... это всё, конечно, круто, но приводит к "забавностям". Например у вас есть классика жанра - база вида: служащие-департамент.
Нагенили EF, и сделали DTO классы одноименные.. и везде по коду для проброски данных через WCF передаете  DTO. А потом у вас появляется два заказчика - одному надо чтобы он видел представление пользователя  (строку) в виде "Имя служащего (департамент)", другой же о департаментах ничего знать не должен. Оопс. Нам придется написать ДВА класса DTO "служащий" + два метода WCF возращающего инфу (это придется сделать в силу безопасности)... ну и чем дальше тем сложнее поддерживать этот зоопарк и не забывать к тому же обновлять маппировку в случае изменения базы....

Автор: Rohoss 1.5.2011, 09:01
Цитата(jonie @  30.4.2011,  17:48 Найти цитируемый пост)
имхо один. Вообще вся эта хрень с генерацией настоящий *****ц  на чуть более крупном проекте, чем Hello word. Незря все сейчас молятся на EF CodeFirst - там этот адЬ залит в классы и его особо не видно.

Почему не NHibernate?

Автор: jonie 1.5.2011, 09:56
Цитата(Rohoss @  1.5.2011,  09:01 Найти цитируемый пост)

Почему не NHibernate? 

потому что вопрос не про него.

Автор: Rohoss 1.5.2011, 11:54
Цитата(jonie @  1.5.2011,  09:56 Найти цитируемый пост)
потому что вопрос не про него. 

а если бы про него был?

Автор: ДобренькийПапаша 1.5.2011, 17:37
Цитата(Rohoss @  1.5.2011,  11:54 Найти цитируемый пост)
а если бы про него был?


А NHibernate принципиально отличается?

Автор: Rohoss 1.5.2011, 21:27
Цитата(ДобренькийПапаша @  1.5.2011,  17:37 Найти цитируемый пост)
А NHibernate принципиально отличается? 

К сожалению я не владею вопросом  smile

Добавлено через 9 минут и 21 секунду
Но говорят, что NHibernate намного более доработан чем EF. Но работу с EF ты удобно ведёшь в дизайнерах VS, а в NHibernate нужно много прописывать вручную в текстовых файлах

Автор: jonie 1.5.2011, 21:46
насчет "доработан" спорно.... в общем и целом да,сейчас я бы выбрал NH, но чуть  позж, вероятнее всего EGCodeFirest

Автор: Любитель 10.5.2011, 06:00
Цитата(jonie @  30.4.2011,  18:00 Найти цитируемый пост)
EFCodeFirts еще не вышел, разве что в составе EF Feature CTP5 (будущем EF5).

http://blogs.msdn.com/b/adonet/archive/2011/04/11/ef-4-1-released.aspx
Вышел. Почти на 3 недели раньше поста smile


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)