2011-02-08 18 views
1


のパラメータとして長い文字列を設定:DB-プロファイラでNHibernateは - 私はこのようなクエリ構築していたクエリ

private void Test() 
{ 
    ISession session = sessionFactory.OpenSession(); 
    var query = session.GetNamedQuery("testQuery"); 
    string s = BuildVeryLongString(); // length more that 4000 chracters 
    query.SetParameter("Param", s, NHibernateUtil.String); 
    query 
     .SetResultTransformer(new AliasToBeanResultTransformer(type)) 
     .List<Type>(); 
} 

を私はParamの種類が十分でないことnvarchar(4000)であることがわかります。長い文字列を使うつもりであることをNHibernateに伝える方法はありますか?
P. DBはMSSQL 2005です。
ありがとうございます!

答えて

2

マップされたプロパティに対する制約として、Paramが使用されていると仮定すると、クエリは、マップされたプロパティに従って、パラメータに正しいデータ型と長さを使用しようとします。 Paramは、nvarchar(max)列にマップされたプロパティと相関しますか?もしそうなら、データ長を正しく設定しましたか? Nhibernateにnvarchar(max)として認識させたい場合は、文字列のデータ長を4000以上の長さに設定する必要があります(4001は動作するはずです)。

+0

今私はNHibernateUtil.StringClobを使用しています。 – StuffHappens

+0

NHibernateのものStringClob ==データ型としてのSQL Serverの 'text'。ほとんどの場合、それはうまくいくはずです。明らかに、カラムのデータ型が実際に 'text'であれば、それは完璧です。ただし、nvarchar(max)またはvarchar(max)を使用している場合は、「StringClob」を削除し、前述のようにマッピングの長さを設定することを検討する必要があります。そうすれば、すべてが正確にマップされていることが分かり、Schema Exporterを使用することもできます(それについても気にしていると仮定します)。 – HackedByChinese

関連する問題