我在我的应用程序中使用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
}
}
}