EF 代码第一个子集合未填充
EF code first child collection not populating
很长一段时间以来,我一直在努力解决这个问题,世界上所有的谷歌搜索都无济于事。我知道一定要简单。
型号:
public class List {
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual IList<ListItem> ListItems { get; set; }
}
public class ListItem {
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsComplete { get; set; }
}
当我设置:
Configuration.ProxyCreationEnabled = false;
则以下为空:
context.Lists.First().ListItems.ToList();
当我设置:
Configuration.ProxyCreationEnabled = true;
我得到以下异常:
Error getting value from 'ListItems' on 'System.Data.Entity.DynamicProxies.List_5C17C9086854159E373744C770F3DDB07BBE4E3E23C2BD0E6B0C5DE3E13E63AD'
我不确定如何进行。如何通过列表访问列表项?
context.Lists.First().ListItems.ToList();
让我们分析一下:
你想得到数据库中的第一个List,其中returns一个List对象。
对于可引用的对象,EF 必须具体化该值,因此它执行 context.Lists.First() 的查询;
您可能会在这里看到问题:因为 属性 ListItems 是一个导航 属性,它不会从数据库中获取,因此它是空的(如果它由于急切加载而没有加载,显式加载)。
您必须使用 Include() 函数告诉 EF 您还希望填充导航 属性,例如:
context.Lists.Include(x=>x.ListItems).First().ListItems.ToList();
请注意,如果列表数据库中没有条目,则 first() 调用将失败 table,因此请考虑以下方法:
var List=context.Lists.Include(x=>x.ListItems).FirstOrDefault();
var ListItems=List==null?null:List.ListItems.ToList();
我将以下属性添加到模型中,这很痛苦:
[DataContract(IsReference = true)]
连同使用 context.List.Include(x => x.ListItems),我已经准备就绪。谢谢!
很长一段时间以来,我一直在努力解决这个问题,世界上所有的谷歌搜索都无济于事。我知道一定要简单。
型号:
public class List {
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual IList<ListItem> ListItems { get; set; }
}
public class ListItem {
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsComplete { get; set; }
}
当我设置:
Configuration.ProxyCreationEnabled = false;
则以下为空:
context.Lists.First().ListItems.ToList();
当我设置:
Configuration.ProxyCreationEnabled = true;
我得到以下异常:
Error getting value from 'ListItems' on 'System.Data.Entity.DynamicProxies.List_5C17C9086854159E373744C770F3DDB07BBE4E3E23C2BD0E6B0C5DE3E13E63AD'
我不确定如何进行。如何通过列表访问列表项?
context.Lists.First().ListItems.ToList();
让我们分析一下: 你想得到数据库中的第一个List,其中returns一个List对象。 对于可引用的对象,EF 必须具体化该值,因此它执行 context.Lists.First() 的查询; 您可能会在这里看到问题:因为 属性 ListItems 是一个导航 属性,它不会从数据库中获取,因此它是空的(如果它由于急切加载而没有加载,显式加载)。
您必须使用 Include() 函数告诉 EF 您还希望填充导航 属性,例如:
context.Lists.Include(x=>x.ListItems).First().ListItems.ToList();
请注意,如果列表数据库中没有条目,则 first() 调用将失败 table,因此请考虑以下方法:
var List=context.Lists.Include(x=>x.ListItems).FirstOrDefault();
var ListItems=List==null?null:List.ListItems.ToList();
我将以下属性添加到模型中,这很痛苦:
[DataContract(IsReference = true)]
连同使用 context.List.Include(x => x.ListItems),我已经准备就绪。谢谢!