Как заставить NHibernate прекратить использование nvarchar (4000) для вставки строк параметров?

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

10
задан Mark Rogers 8 July 2011 в 15:29
поделиться