我们没有使用Fluent Nhibernate。我们有一个带有blob列的表,我们希望有条件地加载它。我们已经将它指定为'懒惰'并且延迟加载工作正常。有没有办法在某个条件下不加载根据完成列的数据? (因此属于各自的财产)
例如,这是映射
<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Blah.blah.blah" assembly="Blah.blah">
<class name="MyDocument" table="HEAVY_DOCS">
<id name="Id" column="docnum" type="decimal"> </id>
<property name="docname" column="docname" />
<property name="details" column="details" />
<property name="doc_data" column="document_data" lazy="true" />
</class>
</hibernate-mapping>
及以下是获取文件的代码
private IList<MyDocument> FetchDocuments(IList<string> docId, bool laodData)
{
if(!laodData)
{
docs = (from doc in Session.Query<MyDocument>()
where docId.Contains(doc.docnum)
select doc).ToList();
}
else
{
//if laodData is false dont load column document_data
}
return docs ;
}
答案 0 :(得分:0)
我们的代码如何驱动列选择的方法是使用projections
。调整后的代码可能如下所示:
if(!laodData)
{
docs = (from doc in Session.Query<MyDocument>()
where docId.Contains(doc.docnum)
select doc // complete object
).ToList();
}
else
{
docs = (from doc in Session.Query<MyDocument>()
where docId.Contains(doc.docnum)
select new MyDocument // in NHibernate world
{ // that would be called
docname= doc.docname, // projection
details = doc.details,
// no "doc_data" for LARGE document
Id = doc.Id,
}
).ToList();
}
使用QueryOver,预测可以从强大的Result Transformers
内置的NHibernate中获益,它可以填充甚至受保护的属性。也许请参阅this custom transformer example深入(包括关系) QueryOver
投影转换...