Мне нужно оптимизировать запрос, который создается при сохранении (вставке запроса) в сущности домена. Я настроил 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
для использования правильный размер входных параметров?