我长期以来一直在反对这一点,世界上所有的Google搜索都没有帮助。我知道它必须简单。
型号:
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;
然后以下是null:
context.Lists.First().ListItems.ToList();
当我设置:
Configuration.ProxyCreationEnabled = true;
我得到以下异常:
Error getting value from 'ListItems' on 'System.Data.Entity.DynamicProxies.List_5C17C9086854159E373744C770F3DDB07BBE4E3E23C2BD0E6B0C5DE3E13E63AD'
我不知道该怎么办。如何通过List访问ListItem?
答案 0 :(得分:1)
<form id="form1" action="http://localhost/urlone" method="get">
<input type="text" name="field1" />
<input type="submit" />
</form>
<form id="form2" action="http://localhost/urltwo" method="post">
<input type="text" name="field2" />
<input type="submit" />
</form>
让我们分析一下: 你想获得数据库中的第一个List,它返回一个List对象。 对于可引用的对象,EF必须具体化该值,因此它执行context.Lists.First(); 您可能会在这里看到问题:因为属性ListItems是一个导航属性,它不会从数据库中获取,因此它为null(如果由于急切加载,显式加载而没有加载)。
您必须告诉EF您还希望使用Include()函数填充导航属性,例如:
context.Lists.First().ListItems.ToList();
请注意,如果列表数据库表中没有条目,则first()调用将失败,因此请考虑以下方法:
context.Lists.Include(x=>x.ListItems).First().ListItems.ToList();
答案 1 :(得分:0)
我在模型中添加了以下属性:
[DataContract(IsReference = true)]
那,以及使用context.List.Include(x =&gt; x.ListItems),我都设置好了。谢谢!