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

А может просто я не умею их готовить?..
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36829931
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нихрена не понял.
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36829987
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУНихрена не понял.
Ну, это для Вас характерно!
Код: 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
Чем отличается Nhibernate и Linq2SQL?
    #36829989
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну собственно в Entity Framework ключи тоже нужно подгружать методом Load();
Это не значит, что он хуже Linq2SQL. Он сложнее.
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36829991
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В НХибере не знаю, но думаю аналогично.
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36829996
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buredНу собственно в Entity Framework ключи тоже нужно подгружать методом Load();
Это не значит, что он хуже Linq2SQL. Он сложнее.

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

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

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

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

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

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

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

Код: 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
Чем отличается Nhibernate и Linq2SQL?
    #36830608
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
когда хибер генерит запрос на селект, он парсит или рефлексирует ваш мап, какие поля включать
в запрос. если поля нет в мапе он его и в запрос включать не будет, он не такой интеллектуал, что бы лазить в базу за этим,( хотя и не мешало бы)
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36830611
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиГде-то в степи,
А если так?,( я интуитивно предположил)

Код: 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
Чем отличается Nhibernate и Linq2SQL?
    #36830621
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КАПЕЦ! Ларчик открывался просто!
Код: 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
Чем отличается Nhibernate и Linq2SQL?
    #36830905
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ничего не помогает, прочитайте наконец документацию!
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36830947
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SolYUtorЕсли ничего не помогает, прочитайте наконец документацию!
Да я бы с радостью, но мало ее по флюенту :( Поэтому по большей части разбираю примеры, пользуюсь чужими приемами и иногда возникают такие вот проблемы.
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36830976
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sql-query + Transformer (Class) как вариант
...
Рейтинг: 0 / 0
Чем отличается Nhibernate и Linq2SQL?
    #36831014
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУ,

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

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

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

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

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

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


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

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

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


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