在EF 4.1热切加载中,如何加载多个(同一级别)孙关系
本文关键字:加载 一级 关系 孙关系 何加载 EF | 更新日期: 2023-09-27 18:25:29
我似乎被一个可能的简单解决方案难住了。我通常在EF 4.1中使用惰性加载,现在我正尝试在应用程序中使用热切加载,这样我就可以毫无问题地使用内置的JSON序列化程序。我遇到的问题是,我不知道如何使用.Include()加载多个相同级别的孙关系。
public class Canvas
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<ContentArea> Contents { get; set; }
}
public class ContentArea
{
public int ID { get; set; }
public int CanvasID { get; set; }
public string Name { get; set; }
public ICollection<TextContent> TextContents { get; set; }
public ICollection<ImageContent> ImageContents { get; set; }
}
public class TextContent
{
public int ID { get; set; }
public int ContentAreaID { get; set; }
public string Text { get; set; }
public int Color { get; set; }
}
public class ImageContent
{
public int ID { get; set; }
public int ContentAreaID { get; set; }
public string Filename { get; set; }
}
我试过以下几种,但没有成功。如何编写加载代码来加载TextContents和ImageContents?
不编译:
var c = dataContext.Canvases
.Include(ca => ca.Contents.Select(co => co.ImageContents).Select(co => co.TextContents))
.FirstOrDefault();
不起作用,第二个Include覆盖第一个:
var c = dataContext.Canvases
.Include(ca => ca.Contents.Select(co => co.ImageContents))
.Include(ca => ca.Contents.Select(co => co.TextContents))
.FirstOrDefault();
不工作,抛出运行时异常:
var c = dataContext.Canvases
.Include(ca => ca.Contents.Select(co => new { co.ImageContents, co.TextContents }))
.FirstOrDefault();
编辑:
我现在已经放弃了这种方法,只是基于其他一些文章和方法创建了视图模型,这些文章和方法使用JSON序列化中构建的ASP.NET MVC解决了"序列化实体模型"问题。这导致我重复了我的类,但通过使用AutoMapper库自动来回传输所有数据,这变得很容易。
我成功地使用了以下代码
var contents = db.Canvases
.Include(c=>c.Contents.Select(co=>co.TextContents))
.Include(c=>c.Contents.Select(co=>co.ImageContents))
.ToList();