|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Сейчас используется Fluent NHibernate 1.2 (NHibernate 2.1.2). СУБД MS SQL 2008 R2. Узнал о технологии LINQ, попробовал на объектах .Net - понравилось. Хочу перевести приложение на Fluent NHibernate 1.2 и NHibernate 3.1. Кто уже перешел или почему не перешел? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2011, 17:20 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Я использую NHibernate 3 + Fluent NHibernate (собрал из исходников) + NHibernate.Linq (собрал из исходников) никаких проблем нет, все работает ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2011, 21:42 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
depend86Я использую NHibernate 3 + Fluent NHibernate (собрал из исходников) + NHibernate.Linq (собрал из исходников) никаких проблем нет, все работает Видимо, это не встроенный в NHibernate 3.x LINQ, а NHibernate.Linq.dll. Но зачем, если в NHibernate 3 есть своя реализация? И почему собранный из исходников? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2011, 21:57 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
depend86Я использую NHibernate 3 + Fluent NHibernate (собрал из исходников) + NHibernate.Linq (собрал из исходников) никаких проблем нет, все работает Не советовал бы использовать NHibernate.Linq с 3-ми версия. Встроенный в трёшку linq-провайдер полностью переписан, и полнее его реализует. Основная проблема с LINQ в том, что он очень хорошо ложится на объекты, и далеко не всегда удачно удаётся его прикрутить к БД. Насколько я знаю, даже мелкомягкие реализации под под EF далеко не всё возможности LINQ реализлизует. NHibernate тоже не исключение. Left join к примеру не поддерживается. (которые в LINQ делается через DefaultIfEmpty()) В общем можете использовать, но иногда его возможностей будет не хватать. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.10.2011, 22:38 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtorОсновная проблема с LINQ в том, что он очень хорошо ложится на объекты, и далеко не всегда удачно удаётся его прикрутить к БД. Насколько я знаю, даже мелкомягкие реализации под под EF далеко не всё возможности LINQ реализлизует.В EF достаточно возможностей для комфортной работы с LINQ-to-SQL. Главное относится к этому не как к LINQ, а как к генератору SQL. :-) SolYUtorNHibernate тоже не исключение. Left join к примеру не поддерживается. (которые в LINQ делается через DefaultIfEmpty())Другими словами LINQ в NHibernate пока нет. :-) SolYUtorВ общем можете использовать, но иногда его возможностей будет не хватать.Если что-то не получается сделать через LINQ - можно добавить в БД View, и делать LINQ-запросы к нему. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 15:52 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Алексей К, Алексей КДругими словами LINQ в NHibernate пока нет. :-) Если рассматривать с позиций всё или ничего, то тогда и в EF нет. Алексей КЕсли что-то не получается сделать через LINQ - можно добавить в БД View, и делать LINQ-запросы к нему. C NHibernate? Через вьюхи в бд? Окстить, Алексей! Столько возможностей для запросов в NH, чтобы возвращаться к старым недобрым вьюхам. И дело не только в том, что их тоже надо поддерживать в адекватном состоянии Для эффективной работы с БД нельзя полагаться на дефлотное поведение маппера. Как правило, это вопросы когда и в каком объёме грузить данные. Вот в хибере для этого много возможностей. PS. Не так давно делал обзор, почему EF намного хуже чем NH. Может быть как-нибудь выложу. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 16:07 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtorАлексей КДругими словами LINQ в NHibernate пока нет. :-) Если рассматривать с позиций всё или ничего, то тогда и в EF нет.По сравнению с NH он там есть. И его вполне достаточно. :-) SolYUtorАлексей КЕсли что-то не получается сделать через LINQ - можно добавить в БД View, и делать LINQ-запросы к нему. C NHibernate? Через вьюхи в бд? Окстить, Алексей! Столько возможностей для запросов в NH, чтобы возвращаться к старым недобрым вьюхам.Почему "недобрым"? SolYUtorИ дело не только в том, что их тоже надо поддерживать в адекватном состоянииИх будет не много, меняться они будут редко. Да и механизмы их поддержки в актуальном состоянии всеми давно изучены и опробованы на практике. SolYUtorДля эффективной работы с БД нельзя полагаться на дефлотное поведение маппера. Как правило, это вопросы когда и в каком объёме грузить данные. Вот в хибере для этого много возможностей.Никогда не ценил Lazy Load, если об этом. Тут можно легко обходиться без него. SolYUtorНе так давно делал обзор, почему EF намного хуже чем NH. Может быть как-нибудь выложу.Выкладывайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 16:22 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtorЕсли рассматривать с позиций всё или ничего, то тогда и в EF нет.С позиции разумной достаточности. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 16:23 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
CVlasovdepend86Я использую NHibernate 3 + Fluent NHibernate (собрал из исходников) + NHibernate.Linq (собрал из исходников) никаких проблем нет, все работает Видимо, это не встроенный в NHibernate 3.x LINQ, а NHibernate.Linq.dll. Но зачем, если в NHibernate 3 есть своя реализация? И почему собранный из исходников? я и не знал, что в nhibernate 3 есть собственный linq :) в следующем проекте попробую ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 20:48 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Для меня хибер пригоден только для мелких пооектов. Ибо отсутствие дизайнера и кодогенерации. Кодогенерация модели по БД - наше всё. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 22:32 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
МСУКодогенерация модели по БД - наше всё. Какие фреймворки используете? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2011, 23:21 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
МСУДля меня хибер пригоден только для мелких пооектов. Ибо отсутствие дизайнера и кодогенерации . T4 чё? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 05:45 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
depend86я и не знал, что в nhibernate 3 есть собственный linq :) в следующем проекте попробуюЕсли как пишут выше в нём нет left join - браться за него рановато. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 05:52 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Алексей КНикогда не ценил Lazy Load, если об этом. Тут можно легко обходиться без него. Если вы никогда не ценили DDD - то да, можно. Иначе в памяти оказался бы приличный кусок БД. Алексей КВыкладывайте тут. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 10:16 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
МСУКодогенерация модели по БД - наше всё. Для мёртвых данных годится. Для настоящей доменной модели нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 10:17 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtorМСУКодогенерация модели по БД - наше всё. Для мёртвых данных годится. Для настоящей доменной модели нет.Как ни крути, доменная модель крутится вокруг структуры БД. По БД сгененировать DAL (Data Access Layer) доменной модели можно без проблем. А вот сгенерировать по DAL ( особенно, изменять имеющуюся ) БД со всеми её особенностями - уже вряд ли. Писать вручную тоже не вариант. Что-то из этих двух (DAL или БД) нужно генерировать. Выбор напрашивается сам собой - генерировать DAL по БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 11:03 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Алексей КВыбор напрашивается сам собой - генерировать DAL по БД.В случае с LINQ - это генерация DataContext-а для используемого LINQ-провайдера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 11:04 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Алексей К, Алексей ККак ни крути, доменная модель крутится вокруг структуры БД. По БД сгененировать DAL (Data Access Layer) доменной модели можно без проблем. А вот сгенерировать по DAL ( особенно, изменять имеющуюся ) БД со всеми её особенностями - уже вряд ли. Нет же! 1. БД проектируется из расчёта оптимального сохранения объектов DDD. Если только вам не надо прикрутить хибер к старой БД. 2. Безжизнная доменная модель , сгенерированная по БД мне нафиг не спллющилась. 3. NHibernate и есть тот самый DAL. Зачем его генерировать? А вот маппинги для DDD объектов генерируются легко. 4. Сгенерировать БД по маппингам - раз плюнуть. Проблема лежит в другой стороне - управление изменениями БД. Сам хибер эту проблему может решить лишь частично (подозреваю, что EF тоже). Для миграций существуют другие, более удобные инструменты. Но для целей тестирования возможностей хибера более чем достаточно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 11:20 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtor1. БД проектируется из расчёта оптимального сохранения объектов DDD.Или DDD проектируется из расчёта оптимального доступа к данным? SolYUtor2. Безжизнная доменная модель , сгенерированная по БД мне нафиг не спллющилась.Зачастую БД ложится один в один на бизнес-объекты. SolYUtor3. NHibernate и есть тот самый DAL. Зачем его генерировать?Речь идёт о прикладной части DAL. SolYUtorА вот маппинги для DDD объектов генерируются легко.Собственно о том и речь. SolYUtorСгенерировать БД по маппингам - раз плюнуть.Да ладно... И индексы тоже сгенерятся? И check constraint? И тд и тп? SolYUtorПроблема лежит в другой стороне - управление изменениями БД. Сам хибер эту проблему может решить лишь частично (подозреваю, что EF тоже).Кому нужны полурешения? Нет решения этой проблемы, и не будет. SolYUtorДля миграций существуют другие, более удобные инструменты.Способа два, и оба автоматизации не поддаются: 1. Изменять структуру данных "рукописными" DDL-скриптами 2. Давать пустую БД новой версии и конвертировать в неё данные. Конвертатор, естественно, тоже придётся писать вручную. SolYUtorНо для целей тестирования возможностей хибера более чем достаточно.И для тестирования полурешения не нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 11:39 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtor тут. > Пакетное чтение (MulityQuery, Future) При наличии LINQ не требуется > Пакетная запись, настраиваемая в конфиге. Это да. Жаль что этого нет. > Пакетная ленивая загрузка коллекций, сокращающая проблему N +1 При наличии LINQ не требуется > Сверхленивая загрузка коллекций (Order.OrderLines.Count приводит к select count(*) ) При наличии LINQ не требуется > Возможность постраничной выборки и фильтрации коллекций. При наличии LINQ не требуется > Разнообразные способы выборки: HQL, ICriteria, QueryOver, LINQ, SQL(включая хранимые процедуры) Опять же при наличии LINQ ничего больше не надо. Хранимые процедуры в EF вызываются тоже. > и трансформации результатов с использованием IResultTransformer. Полезно. Но и отсутствие не критично. > Кеш второго уровня. Накойхер (с) вообще при наличии LINQ эти кэши? > Большое количество точек расширения, открывающих широкие возможности по модификации поведения В EF тоже достаточно мест, позволяющих нарастить функциональность. > Как следствие из предыдущего пункта, существующие большое большое количество расширяющих фреймворков. Примеры: > NHibernate.Envers - аудит Пишется за 5 минут > NHibernate.Validator - думаю понятно :) Пишется за 5 минут > NHiberante.Search - Полнотекстовый поиск с использованием Lucene.Net Пусть БД ищет. > NHibernate.Shards - горизонтальное масштабирование приложений. Распределённый кэш? Если да - нах не нужен. > Rhino.Security - библиотека для разграничения прав доступа. На пару с WCF пишется за 5 минут > Разнообразные способы маппинга объектов на бд: > xml > аттрибуты > маппинг кодом (2 отдельных фреймворка + встроенная поддержка) > по классам > по соглашениям. Это есть. См EF 4.1 CodeFirst > Более мощный язык объектных запросов (HQL vs Entity SQL), позволяющий выполнять объектные DML-команды без загрузки > объектов в память. Плотно не пользовался ESQL. Да и зачем он нужен при наличии LINQ? А то что LINQ гораздо лучше HQL, во всяком случае у меня, сомнений не вызывает. > Встроенная поддержка для логгирования генерируемых sql-команд. Это да. Но тут у каждой БД должен быть аналог MSSQL Profiler. > Более 10 разнообразных id-генераторов, включая наиболее эффективные для ORM HiLo и guid.comb. Не знаю что это. И не интересно. > Возможность маппинга разнообразных пользовательских типов (шифрованные строки, локализованные свойства, запись Enum как строки, и многое другое) Обходимся имеющимся. > Поддержка readonly свойств. Зачем это? > Поддеркжа коллекций элементов (например IList<int>) Есть. > Поддержка маппинга словарей (Dictionary). Есть. > Сильное сообщество программистов. Есть. ЗЫ: При наличии LINQ отпадает необходимость в куче маленьких запросов, на борьбу с которыми направлены всякие ленивые загрузки и кэши в NH. EF в первую очередь ориентирован на LINQ. В нём это просто не надо. Тут совершенно другой подход к проектированию сервисов с логикой. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 11:57 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Алексей К, Алексей КИли DDD проектируется из расчёта оптимального доступа к данным?Зачастую БД ложится один в один на бизнес-объекты. Таблицы - это данные, просто данные. DDD классы - это объеты, обладающие не только состоянием, но и поведением. Поведение вы по БД как генерировать собираетесь? Алексей КРечь идёт о прикладной части DAL. Единственное, что не нет в хибере для прикладной части - это специализированные запросы. Но их нельзя сгенерить по БД, и придёться написать ручками. Алексей КДа ладно... И индексы тоже сгенерятся? И check constraint? И тд и тп? Да, можно. Хотя CheckConstaint в стиле DDD - это лишняя, двойная работа. Вынос логики в БД, чего я советую всячески избегать. Алексей КСпособа два, и оба автоматизации не поддаются: 1. Изменять структуру данных "рукописными" DDL-скриптами 2. Давать пустую БД новой версии и конвертировать в неё данные. Конвертатор, естественно, тоже придётся писать вручную. Почти угадали. Для откройте для себя migrator.net и fluentmigrator . Да, всё равно скрипты пишутся ручками через fluent api. Зато рутину по их применению в правильном порядке берут на себя. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 11:59 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtor... позволяющий выполнять объектные DML-команды без загрузки объектов в память. Весь LINQ-to-SQL на этом построен. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 12:00 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
Я смотрю, LINQ прямо-таки волшебная палочка. Алексей КЗЫ: При наличии LINQ отпадает необходимость в куче маленьких запросов, на борьбу с которыми направлены всякие ленивые загрузки и кэши в NH. EF в первую очередь ориентирован на LINQ. В нём это просто не надо. Тут совершенно другой подход к проектированию сервисов с логикой. Вы правы. Это другой подход. В вашем случае это по сути замаскированные под объекты таблицы, т.к. ничего кроме данных в них нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 12:05 |
|
Кто нибудь использует NHibernate 3.x и запросы на LINQ?
|
|||
---|---|---|---|
#18+
SolYUtorАлексей КИли DDD проектируется из расчёта оптимального доступа к данным?Зачастую БД ложится один в один на бизнес-объекты. Таблицы - это данные, просто данные. DDD классы - это объеты, обладающие не только состоянием, но и поведением. Поведение вы по БД как генерировать собираетесь?Само собой, речь идёт о генерации бизнес-объектов. В них как бы логики никакой нет. Логика в сервисах. SolYUtorАлексей КДа ладно... И индексы тоже сгенерятся? И check constraint? И тд и тп? Да, можно.Пример генерации индексов в студию. С указанием кластерности, филфактора и ещё десятка их параметров. И под конкретную СУБД в отдельности. SolYUtorХотя CheckConstaint в стиле DDD - это лишняя, двойная работа. Вынос логики в БД, чего я советую всячески избегать. Бывают случаи. SolYUtorАлексей КСпособа два, и оба автоматизации не поддаются: 1. Изменять структуру данных "рукописными" DDL-скриптами 2. Давать пустую БД новой версии и конвертировать в неё данные. Конвертатор, естественно, тоже придётся писать вручную. Почти угадали. Для откройте для себя migrator.net и fluentmigrator . Да, всё равно скрипты пишутся ручками через fluent api. Зато рутину по их применению в правильном порядке берут на себя.Ну, а я что сказал? :-) А топологической сортировкой скриптов нас не удивиш. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2011, 12:06 |
|
|
start [/forum/topic.php?fid=17&fpage=38&tid=1350499]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 305ms |
total: | 439ms |
0 / 0 |