我需要优化由域实体上的保存(插入查询)生成的查询。我已经使用 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
如果查看输入参数IpAddress
and CountryCode
,人们会注意到 NHibernate 正在使用nvarchar(4000)
。问题是nvarchar(4000)
远远大于我所需要的IpAddress
or 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
语句使用适当大小的输入参数?