0

私はEF 4.3.1で作業しており、挿入側ではすべてがうまくいっています。しかし今、挿入したオブジェクトを引き出して MVC3 プロジェクトのビューに表示しようとしていて、問題が発生しています。

私の DAL にはChurch、データベースからオブジェクトを取得する次のメソッドがあります。

public virtual TEntity GetById(object id)
{
    return _db.Find(id);
}

オブジェクト自体は次のようになります。

public class Church
{
    //Basic Properties
    public int Id { get; set; }
    public string Name { get; set; }
    public string Website { get; set; }

    ... (some properties)

    //Church Contacts and Services
    public List<Contact> Contacts { get; set; }
    public List<Service> Services { get; set; }

    ....

}

最後の 2 つのプロパティ、Contacts と Services に注意してください。それぞれがデータベース内の 1:Many テーブルです。ただし、これは返されFind()ないようです。2 つのプロパティを null に設定するだけです。

CF Entity Framework によって自動生成されるデータベース スキーマ

データベース内の実際のエントリは、私が期待するとおりに見えます。各教会には、いくつかの連絡先と関連するサービスがあります。それでも、モデルにマップされることはありません...

何かご意見は?

編集ええ、明示的に指示するまで、これらのプロパティをロードしていないようです。これをChurchRepositoryに追加してクエリを変更しました(GenericRepositoryから継承)

public override Church GetById(object id)
{
    return _db.Include("Contacts").Include("Services").FirstOrDefault(c => c.Id == (int)id);
}
4

1 に答える 1

0

ナビゲーション プロパティを仮想としてマークするか、ベスト プラクティスである遅延読み込みなしで含めることもできます。

これを試して

db.Churces.Include(entity=>entity.Services).
Include(entity=>entity.Contacts).SingleOrDefault(entity=>entity.Id == id)

System.Data.EntityInclude 拡張メソッドの名前空間をインポートする必要がある場合があります。

于 2012-06-30T19:15:10.257 に答える