EF-Core Eager加载到ViewModel

时间:2017-05-30 04:46:44

标签: c# linq asp.net-core entity-framework-core foreign-key-relationship

ASP.NET Core 1.1 EF Core 1.1 app PT中,我的情况类似于以下情况:父表CH和子表PT有1-1 FK-关系。我们需要从CH表中的某些记录中获取几列,并从ViewModel表中的相关记录中获取几列。 问题:如何使用以下LINQ查询将这些记录加载到以下Eager Loading注意:我可以使用常规的LINQ Join等完成它,但很好奇我们如何使用public class PT_CH_ViewModel { Public int PTCol1 {get; set;} Public string PTCol1 {get; set;} Public float PTCol1 {get; set;} .... Public int CHCol1 {get; set;} Public string CHCol2 {get; set;} .... }

视图模型:

PT_CH_ViewModel

控制器:需要在此处加载.... PT pt = _context.PT .Include(p => p.CH) .Where(p => p.PTcol == selectedID); .... return View(???); 并将其作为列表返回

public class A {

}

1 个答案:

答案 0 :(得分:2)

您需要为CH实体提供导航属性。一旦急切加载,您就可以访问导航属性的内容。

public class PT
{
    public int Col1 { get; set; }
    ...
    public virtual CH CH { get; set; } // optional, do not put [Required] attribute
}

public CH
{
    public int Col1 { get; set; }
    ...
    [Required] // CH table needs PT table for the 1-1 relationship
    public PT PT { get; set; }
}


PT_CH_ViewModel viewModel = new PT_CH_ViewModel()
{
    PTCol1 = pt.Col1,
    PTCol2 = pt.Col2,
    PTCol3 = pt.Col3,
    CHCol1 = pt.CH.Col1,
    CHCol2 = pt.CH.Col2
};


return View(viewModel);

由于您需要它作为列表,您可以执行以下操作:

var pts = _context.PT
                .Include(p => p.CH)
                .Where(p => p.PTcol == selectedID)
                .Select(pt => new PT_CH_ViewModel()
                {
                    PTCol1 = pt.Col1,
                    PTCol2 = pt.Col2,
                    PTCol3 = pt.Col3,
                    CHCol1 = pt.CH.Col1,
                    CHCol2 = pt.CH.Col2
                }).ToList();

return View(pts);

查看:

@model List<PT_CH_ViewModel>