2008-10-10 33 views
0

我有這個文檔表與一些元數據爲它的文檔和文檔內容作爲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(); 
    } 

回答

0

它是否有助於在數據庫中創建排除團塊一個視圖,然後生成從視圖您的dbml?它與第二個選項並沒有太大差別,但主要保留在數據庫本身中,而不需要對現有表結構進行任何更改。

2

您可以指定一個字段被延遲加載。它是DBML設計器中可用於表格字段的屬性之一。

+0

延遲加載字段是要走的路。我相信延遲加載字段的實際值僅在其屬性訪問器被調用時從數據庫中獲取(例如,myDoc.Blob)。所以這個blob實際上只有在真正需要的時候纔會被提取。 – 2009-07-20 10:46:01