大きなデータオブジェクトがCompressedDataプロパティに格納されているため、クエリを実行するたびにこのデータをロードする必要はありません。だから私はこのクラスをLazyLoad()としてマークしようとしました。 データの圧縮/解凍の機能を提供するUncompressedDataプロパティがあるので、エンティティクラスの外にあるCompressedDataへのアクセスはありません。だから私はTestEntityクラス内でのみCompressedDataを呼び出します。 しかし、私は困っています。 NHibernate 3.2.0.4000(またはFluentNHibernate 1.3.0.717)は、エンティティクラスからこのプロパティへのリクエストがない場合、LazyLoadプロパティをロードしたくありませんでした。テストを実行しようとすると、空の文字列が得られます。エンティティクラス内でアクセスされた場合、LazyLoadedプロパティは動的にロードされません
public class TestEntity {
public TestEntity(){}
public TestEntity(string otherData, string dataForCompress){
OtherData = otherData;
UncompressedData = dataForCompress;
}
public virtual string OtherData {get;set;}
public virtual byte[] CompressedData {get;set;}
public virtual string UncompressedData {
get {
return SomeLongFunctionForDecompress(CompressedData);
}
set {
CompressedData = SomeLongFunctionForCompress(value);
}
}
}
public class TestEntityMapping : ClassMap<TestEntity> {
public TestEntityMapping(){
Map(OtherData);
Map(CompressedData).LazyLoad();
}
}
[Test]
public void can_readLazyLoadedProperty(){
TestEntity obj1 = new TestEntity("test","long data here");
using (nHibernateHelper.CreateNewSession(){
Session.Save(obj1);
}
using (nHibernateHelper.CreateNewSession(){
TestEntity obj2 = Session.Get(obj1.Id);
//byte[] data1 = obj2.CompressedData;
string data2 = obj2.UncompressedData;
Assert.AreEqual("long data here",data2);
}
}
ただし、コメントを外すとbyte[] data1 = obj2.CompressedData;
行がすべて正常に機能します。たぶん、私はいくつかの属性をCompressedDataプロパティに追加するか、マッピングにいくつかのプロパティを追加する必要がありますか?