powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate : пакетная вставка в несколько таблиц не работает
5 сообщений из 5, страница 1 из 1
NHibernate : пакетная вставка в несколько таблиц не работает
    #37737933
NHibernate_User_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, есть сущность, замапленная в три таблицы: предок, его потомок и потомок потомка.
Batch update этой сущности работает.
Но batch insert / delete не работает. Мы применили NH профайлер, он ругается на слишком большое количество индивидуальных запросов.

ID заполняется, как и требуется для bulk insert, еще перед Commit() через SaveOrUpdate. Во время коммита NH генерирует кучу одиночных Insert / Delete.

Bulk insert у нас для сущностей, замапленных в одиночную таблицу, работает ОК.

Вот маппинг:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 public class class1Map : ClassMap<class1>
    {
        public class1Map()
        {
            Id(x => x.Id).GeneratedBy.GuidComb().Not.Nullable();

            Map(x => x.Date).Not.Nullable();
            // поля...

            Where("DeletionDate is null");
        }



его потомок:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public class class2Map : SubclassMap<class2>
    {
        public class2Map ()
        {
            KeyColumn("Id");

            // Поля
        }
    }



потомок потомка:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
    public class class3Map : SubclassMap<class3>
    {
        public class3Map ()
        {
            KeyColumn("Id");

            HasMany(x => x.Collection).AsSet().Access.CamelCaseField().KeyColumn("ColumnId").Inverse().Cascade.AllDeleteOrphan();
        }
    }



Поддерживает ли NHibernate bulk insert / delete для сущностей, замапленных в 2-3 таблицы?

Вот такие запросы идут к БД (взято из профайлера):

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
INSERT INTO dbo.[class1]
            (Date,
             ...
             Id)
VALUES      ('2012-04-04T00:00:00.00' /* @p0_0 */,
             1977 /* @p1_0 */,
             0 /* @p2_0 */,
             0 /* @p3_0 */,
             '2012-04-04T10:35:12.00' /* @p4_0 */,
             NULL /* @p5_0 */,
             1 /* @p6_0 */,
             1577 /* @p7_0 */,
             'dbad6f22-cffc-461f-a438-a02900ae7fe9' /* @p8_0 */) <- Id заполнен перед save

INSERT INTO dbo.[class2]
            (Number,
             FormId,
             Id)
VALUES      ('1977' /* @p0 */,
             1 /* @p1 */,
             'dbad6f22-cffc-461f-a438-a02900ae7fe9' /* @p2 */)

INSERT INTO dbo.[class3]
            (Id)
VALUES      ('dbad6f22-cffc-461f-a438-a02900ae7fe9' /* @p0 */)



И так последовательно вставка табл.1 табл.2 табл.3 (второй экземпляр той же сущности) табл.1 табл.2 табл.3 ...
И delete примерно так же.
Может, bulk получился бы, если заставить NH вставлять в порядке: т1.т.1т.1 т.2т.2т.2 т.3.т.3т.3, но как это сделать?
Или просто NH профайлер тупит? Но для других сущностей (которые в 1 таблице) он показывает все одной строчкой.
Кстати, встроенный профайлер из SQL Server 2008 всегда показывает bulk запросы группой индивидуальных строчек. Ну это он такой глупый.

Как быть?
...
Рейтинг: 0 / 0
NHibernate : пакетная вставка в несколько таблиц не работает
    #37737947
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NHibernate_User_,

Какая версия NHibernate?
...
Рейтинг: 0 / 0
NHibernate : пакетная вставка в несколько таблиц не работает
    #37738005
NHibernate_User_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
3.2
...
Рейтинг: 0 / 0
NHibernate : пакетная вставка в несколько таблиц не работает
    #37739351
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NHibernate_User_,

Не берусь утверждать, но видимо текущая версия пакетного обработчика по каким-то причинам не может сделать такой пакет, несмотря на то, что именно в версии 3.2 он был существенно переработан. Попробуйте на 3.3CR1, вдруг ситуация изменилась.
...
Рейтинг: 0 / 0
NHibernate : пакетная вставка в несколько таблиц не работает
    #37741791
NHibernate_User_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, я ошибочно написал, что 3.2, когда у нас 3.1

Мы можем потестировать этот момент.

А на 3.2 мы не можем перейти из-за As и Is:
При попытке перейти на NHibernate 3.2 не работает as в entity

http://www.sql.ru/forum/actualthread.aspx?tid=905560&hl=linfu
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate : пакетная вставка в несколько таблиц не работает
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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