次のマッピングがあります。ここでは、いくつかの文字列フィールドの長さを指定します。
public ResolutionMap()
{
Schema("dbo");
Table("Resolution");
Id(x => x.IdResolution, "resolution_id").UnsavedValue(0).GeneratedBy.Identity();
Component(x => x.Store, m =>
{
m.Map(y => y.StoreCodeId, "store_code_id");
m.Map(y => y.StoreCode, "store_code").Length(10);
}
);
Map(x => x.ResolutionData, "resolution_data").Length(42);
}
ただし、SQL Serverプロファイラーで実行される更新クエリを見ると、マッピングで設定された長さがパラメーター宣言でまったく尊重されていないことがわかります。
exec sp_executesql
N'UPDATE dbo.Resolution SET resolution_data = @p0, store_code_id = @p1, store_code = @p2 WHERE resolution_id = @p3',
N'@p0 nvarchar(4000),@p1 int,@p2 nvarchar(4000),@p3 int',
@p0=N'Test',@p1=89,@p2=N'ST000003',@p3=275
なぜこれが起こっているのでしょうか?更新プロセスが遅くなるため、長さを設定する必要があります。
現在、FluentNHibernate1.3.0.733とNHibernate3.3.1over .NETFramework3.5を使用しています。