У меня есть несколько больших объектов данных, хранящихся в свойстве CompressedData, поэтому я не хочу загружать эти данные каждый раз, когда делаю какой-либо запрос. Поэтому я попытался пометить это свойство как LazyLoad () в классе отображения.
Нет доступа к CompressedData вне класса сущности, потому что у меня есть свойство UncompressedData, которое дает мне функциональность сжатия / распаковки данных. Поэтому я вызываю CompressedData только внутри класса TestEntity.
Но у меня проблема. NHibernate 3.2.0.4000 (или FluentNHibernate 1.3.0.717) не захотел загружать свойство LazyLoad, если нет запросов к этому свойству вне класса сущности. Если попытаться запустить тест, я получу пустую строку.
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 или добавить некоторые свойства для отображения?