Мне нужно оптимизировать запрос, который создается при сохранении (вставка запроса) в объекте домена. Я настроил NHibernate, используя Fluent NHibernate.
Вот запрос, сгенерированный NHibernate во время вставки ответа пользователя на опрос:
exec sp_executesql N'INSERT INTO dbo.Response (ModifiedDate, IpAddress, CountryCode,
IsRemoteAddr, PollId) VALUES (@p0, @p1, @p2, @p3, @p4); select SCOPE_IDENTITY()',N'@p0
datetime,@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 bit,@p4 int',
@p0='2001-07-08 03:59:05',@p1=N'127.0.0.1',@p2=N'US',@p3=1,@p4=2
Если посмотреть на входные параметры для IpAddress
и CountryCode
, можно заметить, что NHibernate использует nvarchar(4000)
. Проблема в том, что nvarchar(4000)
намного больше, чем мне нужно для IpAddress
или CountryCode
, и из-за высоких требований к трафику и хостингу мне нужно оптимизировать базу данных для использования памяти.
Вот переопределения автоматического сопоставления Fluent NHibernate для этих столбцов:
mapping.Map(x => x.IpAddress).CustomSqlType("varchar(15)");
mapping.Map(x => x.CountryCode).CustomSqlType("varchar(6)");
Это не единственное место, где я вижу всплывающие ненужные nvarchar (4000).
Как мне контролировать NHibernate использование nvarchar(4000)
для представления строки?
Как мне изменить этот оператор insert
, чтобы использовать входные параметры правильного размера?