如何使NHibernate停止使用nvarchar(4000)插入参数字符串?

Mar*_*ers 10 sql-server nhibernate hibernate nhibernate-mapping fluent-nhibernate

我需要优化域实体上的保存(插入查询)生成的查询.我已经使用Fluent NHibernate配置了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
Run Code Online (Sandbox Code Playgroud)

如果观察的输入参数IpAddressCountryCode,将会注意到,NHibernate的使用nvarchar(4000).问题是,nvarchar(4000)远远大于我需要或者IpAddressCountryCode并且由于高流量和托管的要求,我需要优化内存使用情况的数据库.

以下是这些列的Fluent NHibernate自动映射覆盖:

    mapping.Map(x => x.IpAddress).CustomSqlType("varchar(15)");
    mapping.Map(x => x.CountryCode).CustomSqlType("varchar(6)");
Run Code Online (Sandbox Code Playgroud)

这不是我看到不必要的nvarchar(4000)弹出的唯一地方.

如何控制NHibernatenvarchar(4000)对字符串表示的使用?

如何更改此insert语句以使用适当大小的输入参数?

Die*_*hon 9

指定TypeNHibernateUtil.AnsiStringLength而不是使用CustomSqlType.