当前位置: 首页 > 面试题库 >

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

尹正奇
2023-03-14
问题内容

我需要优化由域实体上的保存(插入查询)产生的查询。我已经使用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

如果观察的输入参数 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)");

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

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

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


问题答案:

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



 类似资料:
  • 问题内容: 当我尝试使用此查询时,我收到一条错误消息,指出Perameter电子邮件不存在,我确定变量:email,login_pass,payment_method,operateur是有效的并且存在。 我尝试删除引号,但我得到了 您的Sql语法有错误,请在第1行的’:email,:login_pass,:payment_method,:avecpuce)’附近查看与您的SQL Server对应

  • 问题内容: 我没有看到与此主题相关的任何类似问题,因此我不得不针对当前正在研究的内容进行研究。我以为如果其他人有相同的问题,我会给出答案。 问题答案: 您只需将字符串连接起来,然后CHAR(13)在要换行的位置插入一个即可。 例子: 打印出以下内容: This is line 1. This is line 2.

  • 是否可以使用通用sql将超过4000个字符的字符串插入CLOB 新增列: 我必须用SQL插入它 请指教。

  • 首先为我的英语感到抱歉。 我试图插入大约15000行,问题是有一个CLOB类型的列可能有超过4000个字符,给出错误ORA-01704,我知道如何像这样一个接一个地插入:TO_CLOB(string)TO_CLOB(string)并且它工作,但是我有大约1000个这样的情况发生,我不想手动执行,你能想到什么方法来插入它们? 谢谢你。

  • 如何向CLOB类型列插入超过4000个字符? 导致错误: ORA-01704:字符串太长。 当我阅读Oracle参考时,可以最大节省4GB(千兆字节)?

  • 问题内容: 我正在使用 Ubuntu 9.04 我已经安装了以下软件包版本: 我已经这样配置: 我已经这样配置: 我已经从Pyodbc修订版中获取并使用“ ”进行了安装 我有一台装有 Microsoft SQL Server 2000 的Windows机器,安装在本地网络上,并在本地IP地址10.32.42.69上侦听。我有一个名为“ Common”的空数据库。我的用户“ sa”具有完全特权的密码