Linq和沉重的斑点

问题描述:

我有这个文档表与一些元数据为它的文档和文档内容作为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(); 
    } 

它是否有助于在数据库中创建排除团块一个视图,然后生成从视图您的dbml?它与第二个选项并没有太大差别,但主要保留在数据库本身中,而不需要对现有表结构进行任何更改。

您可以指定一个字段被延迟加载。它是DBML设计器中可用于表格字段的属性之一。

+0

延迟加载字段是要走的路。我相信延迟加载字段的实际值仅在其属性访问器被调用时从数据库中获取(例如,myDoc.Blob)。所以这个blob实际上只有在真正需要的时候才会被提取。 – 2009-07-20 10:46:01