为什么施工需要很多时间



我有与EntityFramework一起使用的类:

public partial class BaseDocument
{
   public BaseDocument()
   {
       DocumentLinks = new List<DocumentLink>();
   }
   public int Id {set;get;}
   public virtual List<DocumentLink> DocumentLinks {set;get;}
}
public partial class Payment:BaseDocument
{
}
public partial class Bill:BaseDocument
{
}
public partial class DocumentLink
{
   public int Id{set;get;}
   public int StartDocId{set;get;}
   public int EndDocId{set;get;}
   public virtual BaseDocument StartDoc{set;get;}
   public virtual BaseDocument EndDoc{set;get;}
}

现在我使用 Linq 选择文档,并希望遍历他的DocumentLinks列表。

var payment = dbContext.Payments.First(t=>t.Id = id);
foreach(var link in payment.DocumentLinks)
{
   if (link is Payment)
   {
     //do something
   }
   else if (link is Bill)
   {
     //do something
   }
}

而且我的代码在行if (link is Payment)处工作非常缓慢。在这条线之后,一切都很快。

怎么了?

您的意思是实际执行数据库查询的行很慢?提示 - 这就是它很慢的原因。

var payment = dbContext.Payments.First(t=>t.Id = id);

我看不出付款如何包含 DocumentLiks - 这意味着它们是延迟加载的。这意味着这发生在福尔奇。你去吧。慢。

将它们包含在初始查询中。

不是对你的问题的直接回答,而是建议你不应该像这样打字嗅探。多态性允许您忽略对象的确切类型,使用它。

将您需要的任何行为放入BaseDocument并删除is Paymentis Bill

var payment = dbContext.Payments[id];
foreach(var link in payment.DocumentLiks)
{
    link.DoSomething();
}

这可能是因为延迟加载。在 DBContext 配置中指定:

 this.Configuration.LazyLoadingEnabled = false;

最新更新