我在我的应用程序中使用 EF5(代码优先)。我有一个包含一些延迟加载字段的表。
public class TestEntity
{
public int Id { get; set; }
public virtual TestEntity2 SubEntity2 { get; set; }
public virtual TestEntity3 SubEntity3 { get; set; }
private ICollection<SubEntity4> _subEntities;
public ICollection<SubEntity4> SubEntities
{
get { return _subEntities ?? (_subEntities = new Collection<SubEntity4>()); }
protected set { _subEntities = value; }
}
}
当我从数据库中读取此内容时,SubEntity2 和 SubEntity3 加载正常,但 SubEntities 集合不会加载,并且始终保持 Count=0。所以我强迫这样的负载:
db.Entry(queryResult).Collection(rr => rr.SubEntities).Load();
但据我了解,EF 在第一次调用期间应自动加载此集合,就像 SubEntity2 和 SubEntity3 一样。为什么它不能与集合一起使用?
我用来读取数据库的代码示例:
using (var db = new TestContext(_connection, false))
{
var query = from r in db.SubEntities
where r.Id == 10
select r;
var queryRes = query.FirstOrDefault();
if (queryRes != null)
{
if (queryRes.FederalRegion != null)
{
// Do something
}
foreach (var dbEnt in queryRes.SubEntities)
{
// Do something
}
}
}