Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > LINQ (Language-Integrated Query) > LinQ vs NHibernate


Автор: Bladerender 10.7.2008, 16:11
Товарищи. Помогите решить такую вот проблемму. Есть у меня программа,  которая оперирует с данными, которые хранятся в обьектах.
Раньше эти данные сериализировались а потом в эти обьекты подгружались. Но из-за того что структура немного меняется классов, надумалось перейти на БазуДанных и данные хранить там. То теперь стала задача. Каким образом данные те что хранятся в базе данных преобразовать в объекты классов, что у меня в программе. Читал что есть NHibernate, что своим маппингом может преобразовать данные базы в обьекты, которые мне нада и появилось вот щас LinQ. Насколько я понял то это равноценные заменители или как? Чем посоветуете делать?

Автор: HalkaR 10.7.2008, 16:35
Нет, LINQ - это не ORM. Точнее он может использоваться как ORM, но в нем мало возможностей. Т.е. он поддерживает только прямую выборку из базы где, один класс==одна таблица. Есть ADO.NET Entity Framework - это довольно мощный ORM от Microsoft (правда он еще beta).

Автор: PashaPash 10.7.2008, 17:54
HalkaR, вообще-то поддерживается Single-Table inheritance. 

IMHO, для уровня топикастера, Linq To SQL - лучший выбор.

Автор: Idsa 10.7.2008, 19:56
Цитата(HalkaR @  10.7.2008,  20:35 Найти цитируемый пост)
Есть ADO.NET Entity Framework - это довольно мощный ORM от Microsoft (правда он еще beta).

Я сейчас как раз передываю DAL в одном проекте с LINQ To SQL на Entity Framework... Я так и не нашел, какая версия EF включена в SP1 beta, но вроде как Scott Gu заявлял, что если продукты в финальном SP1 и будут меняться, то незначительно.

Цитата(PashaPash @  10.7.2008,  21:54 Найти цитируемый пост)
IMHO, для уровня топикастера, Linq To SQL - лучший выбор. 

Я бы не сказал, что с EF работать гораздо сложнее, чем с LINQ To SQL. Но т. к. при этом EF предоставляет больше возможностей и фиксит существенные недочеты LINQ To SQL (собственно, именно поэтому DAL я и портирую), я рекомендую в любом проекте, нуждающемся в ORM, использовать EF (или nHibernate).
EF действительно лучше LINQ To SQL. Немудрено, ведь LINQ To SQL и ORM-то по большому счету не является. Сравнение же EF и nHibernate гораздо сложнее: оба фреймворка предоставляют практически одинаковую функциональность (у nHibernate и поддержка LINQ есть).
Есть неплохая статья, сравнивающая EF с ADO.NET, LINQ To SQL и nHibernate: http://blogs.msdn.com/dsimmons/archive/2008/05/17/why-use-the-entity-framework.aspx

Цитата(Bladerender @  10.7.2008,  20:11 Найти цитируемый пост)
Раньше эти данные сериализировались а потом в эти обьекты подгружались. Но из-за того что структура немного меняется классов, надумалось перейти на БазуДанных и данные хранить там. То теперь стала задача. Каким образом данные те что хранятся в базе данных преобразовать в объекты классов, что у меня в программе.

Подход остается тот же: сериализация, сохранение, чтение, десериализация. Единственное, что изменится - хранилище данных.

Цитата(Bladerender @  10.7.2008,  20:11 Найти цитируемый пост)
Насколько я понял то это равноценные заменители или как? Чем посоветуете делать? 

Судя по описанию, у Вас не намечается очень сложной схемы базы. Поэтому вряд ли Вам удастся ощутить преимущества EF в плане маппинга. Так что можете использовать любую из трех ORM. Правда, если база у Вас не на Sql Server'е, то выбор сокращается до EF и nHibernate.

Автор: Idsa 10.7.2008, 20:39
Только что вот http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3600544&SiteID=1&mode=1 выяснил, что в sp1 beta входит Entity Framework beta4. Они, правда не называют его beta4, но в нем есть некоторые отличия от beta3, но при этом это еще не релиз: еще есть баги (я сам один словил).

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