我有這個文檔表與一些元數據爲它的文檔和文檔內容作爲blob。Linq和沉重的斑點
然後我用lucene.Net查詢我的文檔;作爲回報,我向我的文檔表提供了一個Guid列表,並且還顯示了兩個字段,其中包含突出顯示的文檔名稱的高亮顯示的html版本和提取的搜索關鍵字。
然後我使用linq將這個結果與我的文檔表字段聯繫起來,以獲得一個列表來顯示搜索結果。愚蠢的事情是linq嘗試加載到文檔blob,雖然它沒有用於連接。
我想到的兩個選項,他們都不喜歡:
- 我BLOB移動到一個新表1-1掛靠到文檔表格。我不喜歡它,因爲linq的限制迫使我改變我的數據庫結構。
- 添加一個新的帶有「LiteDocument」表的dbml,並從dbml中的文檔表中刪除blob;我不喜歡它,因爲如果文檔表有變化,我有兩個地方需要維護。
我想知道是否有更好的方法來做到這一點?這裏的代碼片段:
public class LuceneSearchResult
{
public Guid DocumentID { get; set; }
public string FormattedDocumentFileName { get; set; }
public string FormattedDocumentExtract { get; set; }
}
和
public IList Search(string searchPhrase, Guid? ProductId)
{
searchPhrase = PrepareSearchPhraseWithThesaurus(searchPhrase);
var result = RunLuceneQuery(searchPhrase, ProductId);
var dc = new ChinaHcpDataContext();
var docs =
from r in result
join d in dc.Documents on r.DocumentID equals d.DocumentID
select
new
{
d.DocumentID,
TradeNameEN = d.TradeProduct != null ? d.TradeProduct.TradeNameEN : "",
TradeNameZH = d.TradeProduct != null ? d.TradeProduct.TradeNameZH : "",
d.DocumentFileName,
d.InsertedDateUtc,
d.Size,
DocumentDisplayText = r.FormattedDocumentFileName,
DocumentSelectionReason = r.FormattedDocumentExtract
};
return docs.ToList();
}
延遲加載字段是要走的路。我相信延遲加載字段的實際值僅在其屬性訪問器被調用時從數據庫中獲取(例如,myDoc.Blob)。所以這個blob實際上只有在真正需要的時候纔會被提取。 – 2009-07-20 10:46:01