powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
5 сообщений из 5, страница 1 из 1
NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
    #37727059
mesh83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, ай нид хелп. Кто сталкивался с подобной связкой (сабж) и кому удавалось таки добиться от этой связки нормального батчинга, отзовитесь! Посмотрел в исходниках NHibernate, там вроде даже соответствующего батчера(для npgsql) нет. Может кто дописывал руками или еще какие способы? Заранее премного благодарен.
...
Рейтинг: 0 / 0
NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
    #37728550
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesh83,

При отсутствие встроенного батчера для какой либо базы Nhibernate должен просто клеить строки в большой dml. Кроме того, на возможность использовать пакетные операция влияет еще конфигурация и тип id-генератора. Так что выкладывайте, что у вас там написано.
...
Рейтинг: 0 / 0
NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
    #37729528
mesh83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor, спасибо за ответ. Склепал тестовый проект небольшой на котором не проходит батчинг. В базе создается одна таблица Person, на которую мапится соответствующая сущность. тип Id - Guid. Далее следующий код выполняется:
Код: c#
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.
using (var session = sf.OpenSession())
{
	// Если раскоментарить эту строку, то лезет эксепшен.
	//session.SetBatchSize(1); 
	Console.WriteLine("Start test");
	session.FlushMode = FlushMode.Commit;
	DateTime dtStart = DateTime.Now;
	using (var tran = session.BeginTransaction(IsolationLevel.ReadCommitted))
	{
		for (int i = 0; i < 10000; i++)
		{
			session.Save(new Person()
						    {
						        FirstName = "Персона " + i,
						        LastName = "",
						        Email = "person" + i + "@gmail.com",
						        Phone = "+7918819887" + i
						    });
		}
		Console.WriteLine("Check Point 1. Time elapsed {0}", DateTime.Now - dtStart);
		tran.Commit();
	}
	Console.WriteLine("Check Point 2. Time elapsed {0}", DateTime.Now - dtStart);
	session.Close();
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">		
	<session-factory>
		<property name="dialect">NHibernate.Dialect.PostgreSQL82Dialect</property>
		<property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
		<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
		<property name="connection.connection_string">
			Server=localhost;Database=NHibBatchingTestDb;User ID=postgres;Password=sa;
		</property>
		<property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
		<property name="format_sql">true</property>
		<property name="show_sql">false</property>
		<property name="adonet.batch_size">20</property>
		<mapping assembly="NHibBatchingTestFixture"/>
	</session-factory>
</hibernate-configuration>


Время выполнения на checkpint1 - 0.5 сек, на checkpoint2 - 8 cек. Более того NHibernate Profiler говорит что все запросы в базу лезут порознь. Проект выложил на депозит:
http://depositfiles.com/files/1fwvncqxc
...
Рейтинг: 0 / 0
NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
    #37730436
SolYUtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mesh83,

рукодельная batcher factory спасёт отца русской демократии.
...
Рейтинг: 0 / 0
NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
    #37736240
mesh83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SolYUtor, спасибо за помощь, помогло:)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate 3.0 + Postgresql 9.0 (Npgsql 2.0.10) batch CRUD
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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