Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Чем отличается Nhibernate и Linq2SQL? / 25 сообщений из 54, страница 1 из 3
26.08.2010, 19:22
    #36814050
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Добрый день, коллеги!
Препарирую один пример на Linq2SQL и пытаюсь повторить его на Nhibernate.
И все время натыкаюсь на проблемы несоответствия.
Вот они, главные на текущий момент: внешние ключи .
В Nhibernate они явно не мапятся на поля класса (только в отношениях). Видимо поэтому в объекте, при заполнении его из БД, они остаются пустыми. А вот Linq2SQL заполняет их значениями!
Из-за этого возникает некоторый геморрой с выпадающими списками и т.п.

А может просто я не умею их готовить?..
...
Рейтинг: 0 / 0
04.09.2010, 23:19
    #36829931
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Нихрена не понял.
...
Рейтинг: 0 / 0
05.09.2010, 00:43
    #36829987
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
МСУНихрена не понял.
Ну, это для Вас характерно!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    public class Order
    {
        public virtual int ORDER_ID { get; protected set; }
        public virtual string ORDER_NAME { get; set; }
        public virtual int CUSTOMER_ID { get; set; }  // Поле, на которое проецируется внешний ключ БД
        public virtual Customer Customer { get; protected set; }
    }
Маппинг:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
    public OrderMapper()
    {
        Table("ORDERS");
        Id(x => x.ORDER_ID).Column("ORDER_ID").GeneratedBy.Native("SEQ_ORDER_ID");
        Map(x => x.ORDER_NAME).Column("ORDER_NAME");
        References(x => x.Customer, "CUSTOMER_ID");
    }
Поле CUSTOMER_ID как бы есть, но Nhibernate не заполняет его данными из БД а при попытке замапить явно - выдает исключение (что верно - для предотвращения конфликтов).
...
Рейтинг: 0 / 0
05.09.2010, 00:46
    #36829989
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Ну собственно в Entity Framework ключи тоже нужно подгружать методом Load();
Это не значит, что он хуже Linq2SQL. Он сложнее.
...
Рейтинг: 0 / 0
05.09.2010, 00:47
    #36829991
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
В НХибере не знаю, но думаю аналогично.
...
Рейтинг: 0 / 0
05.09.2010, 00:55
    #36829996
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
buredНу собственно в Entity Framework ключи тоже нужно подгружать методом Load();
Это не значит, что он хуже Linq2SQL. Он сложнее.

В NH подгружать их не нужно - они извлекаются из связанного объекта.
Код: plaintext
order.CUSTOMER_ID = order.Customer.CUSTOMER_ID 
Я дополнил соответственным кодом геттеры таких полей, но это все равно костыль...
...
Рейтинг: 0 / 0
05.09.2010, 13:31
    #36830105
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Курдль,

Вы хотите сказать что хибер не полную таблицу тащит для ордера, поля сязки оставляет пустой?
...
Рейтинг: 0 / 0
05.09.2010, 21:59
    #36830508
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Где-то в степиКурдль,

Вы хотите сказать что хибер не полную таблицу тащит для ордера, поля сязки оставляет пустой?

Именно это, возможно неуклюже, я пытался довести до всеобщего внимания в первом посте.
Но повторяю, возможно я что-то упустил в маппинге, хотя перерыл кучу статей и примеров по флюенту.
...
Рейтинг: 0 / 0
05.09.2010, 22:34
    #36830532
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Курдль,

по-моему всё верно. А представьте, что у вас там целое дерево. Что всё дерево тащить на клиента, даже если fk вообще не нужен?
...
Рейтинг: 0 / 0
05.09.2010, 22:36
    #36830533
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Т.е. если вам нужен просто ORDER_NAME, зачем тащить Покупателя, а за ним, может быть ещё несколько адресов из таблички Адресов и т.д.
...
Рейтинг: 0 / 0
05.09.2010, 22:42
    #36830542
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
buredТ.е. если вам нужен просто ORDER_NAME, зачем тащить Покупателя, а за ним, может быть ещё несколько адресов из таблички Адресов и т.д.
Вы не вникли в проблему. Я не говорю про дерево. Я хотел бы просто чтобы NH "тащил" все поля таблицы ORDERS (если рассматривать мой пример), включая CUSTOMER_ID. Сейчас я получаю или 0 или null (в зависимости от типа int или int?).
...
Рейтинг: 0 / 0
05.09.2010, 22:49
    #36830550
bured
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Курдль,

теперь понял. Просто в EF самого поля fk нет. Хотя до него можно добраться.
...
Рейтинг: 0 / 0
05.09.2010, 23:01
    #36830563
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Курдль,

Все дело в вашем мапинге, я не силен, чем вы пользуетесь, предпочитаю автогенерить по старинке
в хмл, ищите ошибку и ся, хибер тут не причем
...
Рейтинг: 0 / 0
05.09.2010, 23:29
    #36830588
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Где-то в степи,
А если так?,( я интуитивно предположил)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public OrderMapper()
    {
        Table("ORDERS");
        Id(x => x.ORDER_ID).Column("ORDER_ID").GeneratedBy.Native("SEQ_ORDER_ID");
        Map(x => x.ORDER_NAME).Column("ORDER_NAME");
        Map(x => x.CUSTOMER_ID).Column("CUSTOMER_ID");
        References(x => x.Customer, "CUSTOMER_ID");
    }
...
Рейтинг: 0 / 0
05.09.2010, 23:52
    #36830608
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
когда хибер генерит запрос на селект, он парсит или рефлексирует ваш мап, какие поля включать
в запрос. если поля нет в мапе он его и в запрос включать не будет, он не такой интеллектуал, что бы лазить в базу за этим,( хотя и не мешало бы)
...
Рейтинг: 0 / 0
05.09.2010, 23:56
    #36830611
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Где-то в степиГде-то в степи,
А если так?,( я интуитивно предположил)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
public OrderMapper()
    {
        Table("ORDERS");
        Id(x => x.ORDER_ID).Column("ORDER_ID").GeneratedBy.Native("SEQ_ORDER_ID");
        Map(x => x.ORDER_NAME).Column("ORDER_NAME");
        Map(x => x.CUSTOMER_ID).Column("CUSTOMER_ID");
        References(x => x.Customer, "CUSTOMER_ID");
    }


Конечно же я первым делом испытал этот вариант.
Поле вполне нормально принимает значение из БД, как мне и хотелось.
НО! При Update неизменно вылезает "Index out of range"
...
Рейтинг: 0 / 0
06.09.2010, 00:04
    #36830621
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
КАПЕЦ! Ларчик открывался просто!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
public OrderMapper()
    {
        Table("ORDERS");
        Id(x => x.ORDER_ID).Column("ORDER_ID").GeneratedBy.Native("SEQ_ORDER_ID");
        Map(x => x.ORDER_NAME).Column("ORDER_NAME");
        Map(x => x.CUSTOMER_ID).Column("CUSTOMER_ID").ReadOnly();
        References(x => x.Customer, "CUSTOMER_ID");
    }

Приношу глубочайшие извинения ревнителям великого и могучего NHibernate!
...
Рейтинг: 0 / 0
06.09.2010, 10:14
    #36830905
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Если ничего не помогает, прочитайте наконец документацию!
...
Рейтинг: 0 / 0
06.09.2010, 10:30
    #36830947
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
SolYUtorЕсли ничего не помогает, прочитайте наконец документацию!
Да я бы с радостью, но мало ее по флюенту :( Поэтому по большей части разбираю примеры, пользуюсь чужими приемами и иногда возникают такие вот проблемы.
...
Рейтинг: 0 / 0
06.09.2010, 10:42
    #36830976
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
sql-query + Transformer (Class) как вариант
...
Рейтинг: 0 / 0
06.09.2010, 10:53
    #36831014
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
МСУ,

Спасибо, выкрутился уже: тремя постами ранее

Жаль, что при записи в БД того же Order не обойтись без извлечения Cuctomer из БД:
Код: plaintext
\npublic void SaveNewOrder(Order order)\n{\n...\n  order.Customer = session.Load<Customer>(order.CUSTOMER_ID);\n...\n}\n
Или и здесь я чего-то недосмотрел? Напр. какого либо "каскадного" указания в маппинге?..
...
Рейтинг: 0 / 0
06.09.2010, 10:59
    #36831029
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Курдль

Не нужно извлекать.

Код: plaintext
Customer customer = new Customer { CustomerID = 3 };
...
Рейтинг: 0 / 0
06.09.2010, 11:04
    #36831043
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
МСУКурдль

Не нужно извлекать.

Код: plaintext
Customer customer = new Customer { CustomerID = 3 };


Круто! И оно не подерется с уже существующим в базе Customer с ID = 3?
...
Рейтинг: 0 / 0
06.09.2010, 11:09
    #36831060
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
Курдлёчек, что мешает попробовать, религиозное воспитание? )

P.S. Есть такое религиозное воспитание делать ридонливыми ключи сущностей. Не делайте так, если хотите оптимальные запросы.
...
Рейтинг: 0 / 0
06.09.2010, 11:13
    #36831076
Курдль
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем отличается Nhibernate и Linq2SQL?
МСУ,

Да вот только хотел спросить, ведь это противоречит
Код: plaintext
1.
2.
3.
4.
5.
public class Customer
    {
        public virtual int CUSTOMER_ID { get; protected set; }
...
     }
Кстати, такая религиозная конструкция изображена во всех прочитанных мною "руководящих документах"!
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Чем отличается Nhibernate и Linq2SQL? / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]