加载相关对象而无需多次数据库调用

时间:2010-07-09 03:58:50

标签: asp.net-mvc linq-to-sql

我正在学习LINQ to SQL,并遇到了以下障碍。

我有以下3个表:

  1. PC (PCGUID,ParentPCGUID,ModelName,RetailerGUID)
  2. 优惠 (OfferGUID,ParentGUID,标题)
  3. 零售商 (RetailerGUID,名称)
  4. 具有以下关系:

    1. PC 1:N 优惠
    2. 零售商 1:N PC
    3. 零售商 1:N 优惠
    4. PC 1:N PC (自我引用)
    5. 我需要从PC上获取记录,只有1条记录来自PC.Offer(具有特定的where子句),而且只有1条记录来自PC.Retailer.Offer(具有特定的where子句),并且希望只有一个记录来自数据库中。

      到目前为止我有以下查询(到目前为止我已尝试了大约一百个),但它多次击中数据库。

          var q = from pc in PCs
              where pc.PCGUID == guid || pc.ParentPCGUID == guid
              select new { 
                  PC = pc,
                  PCOffers = pc.Offers.FirstOrDefault(),
                  RetailOffers = pc.Retailer.Offers.FirstOrDefault()
              };
      

      如果我只提供商品表的一个属性,那么:

          var q = from pc in PCs
              where pc.PCGUID == guid || pc.ParentPCGUID == guid
              select new { 
                  PC = pc,
                  PCOffers = pc.Offers.FirstOrDefault().Title,
                  RetailOffers = pc.Retailer.Offers.FirstOrDefault().Title
              };
      

      它工作得很好,只能击中db一次,但我需要整个offer对象。任何帮助将不胜感激。

      由于

1 个答案:

答案 0 :(得分:0)

您可能想尝试这样的事情,但我不确定它会有所帮助。

YourDataContext db = new YourDataContext();
db.DeferredLoadingEnabled = false;

DataLoadOptions loadOptions = new DataLoadOptions(); 
loadOptions.LoadWith<PC>(p => p.Offers); 
loadOptions.LoadWith<PC>(p => p.Retailer); 
loadOptions.LoadWith<Retailer>(r => r.Offers); 

db.LoadOptions = loadOptions;