渴望加载多个表

时间:2017-02-09 13:54:49

标签: entity-framework lazy-loading eager-loading

我有一个有4张桌子的模型 页面> ContentHeaders>内容>图片

我正在使用以下代码进行延迟加载,但它的工作原理有点慢

var thisPage  = db.pages(id)

所以我尝试使用急切的加载,但无法让它通过内容加载器工作,intellisence赢得了不接受下一个级别:内容

var thisPage = db.pages.Where(a => a.pageKey == pageKey).Include(b => b.ContentHeaders).Include(b=>b.contents).FirstOrDefault()

我猜这是因为内容是contentheaders的属性,而不是页面,但不知道如何处理。我还有下一个包含图片的问题(这是1:1的内容)。

这是我所采用的 - 它可以工作,但寻找更清洁(更快)的解决方案

var thisPage = db.pages.Where(a => a.pageKey == pageKey).Include(b => b.contentheaders).FirstOrDefault();

foreach(contentheader in thisPage.contentheaders)
{
     m.contents =db.contents.Where(b => b.contentKey==     m.contentKey).ToList();
        foreach(content ml in m.contents)
        {
           ml.picture = db.pictures.Where(b => b.pictKey == ml.pictKey).FirstOrDefault();
        }                         
 }

Table Structure is pretty straightforward

    pages: (primary) pagekey.... other fields

    contentheaders (primary) mkey  (foreign n:1 )      pagekey>pages.pagekey... other fields

    content: (primary) mlkey  (foreign n:1) mkey>contentheaders.mkey... other fields

班级模型

public partial class page
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public page()
    {
        this.contentHeaders= new HashSet<contentHeader>();
    }
    public short mKey{ get; set; }
    public short pageKey { get; set; }
    public virtual ICollection<contentHeader> contentHeaders{ get; set; }
}

    public partial class contentHeader
{
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
    public contentheader()
    {
        this.contents= new HashSet<content>();
    }
    public virtual page page { get; set; }
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
    public virtual ICollection<content> content{ get; set; }
    }
public partial class content
{
    public short mlKey { get; set; }
    public short mKey{ get; set; }
    public virtual contentHeader contentheader{ get; set; }
}

我上面提到了一张图片,但忘记了

0 个答案:

没有答案