アプリケーションで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();
しかし、私が理解しているように、このコレクションは、SubEntity2やSubEntity3と同様に、最初の呼び出し時にEFによって自動的にロードされる必要があります。コレクションで動作しないのはなぜですか?
データベースの読み取りに使用しているコードの例:
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
}
}
}