4

MVC4 プロジェクトに Entity Framework 5.0 を使用しています。問題があります。任意のビューに db モデルを指定すると、コントローラーは関係のないモデルを送信します

例;

私は User クラスと関連部門を持っています

コントローラーで使用する場合

using(context)
{
  var user = context.Find(id);
  string department = user.Department.Name;
} 

コンテキストで呼び出したときに機能します。しかし、私がそれをするとき

using(context)
{
  var user = context.Find(id);
  return View(user);
} 

そして、次のようにビューで呼び出します

Model.Department.Name 

エラーが発生しました。

これが私の答えですが、良くありません

using(context)
{
  var user = context.Find(id);
  string department = user.Department.Name;
  return View(user);
} 

ビューで Model.Department.Name を使用しようとすると、エラーは発生しません。クラスをモデルとして使用するときは、すべての関係に対してそれを行う必要があります。この問題のより良い解決策はありますか? コントローラーでこれらを呼び出さずに、ビューですべての関係を使用したい。

私はあなたが私を理解できることを願っています、私の英語で申し訳ありません。

4

3 に答える 3

1

あなたは何を達成しようとしていますか?1 つまたは複数の部門を持つユーザーのビューを一覧表示しますか?

于 2013-02-25T13:25:39.800 に答える
1

DbContext で.Includeメソッドを使用して、必要なリレーションを熱心にロードできます。

context.Users.Include(u => u.Department).FirstOrDefault(u => u.Id == id);

古いバージョンのエンティティ フレームワークを使用している場合は、このメソッドの汎用バージョンを使用できない可能性があります。

context.Users.Include("Department").FirstOrDefault(u => u.Id == id);
于 2013-02-25T13:06:10.367 に答える
1

これは、元のコードで部門を「ロード」していないためです。コンテキストは using ステートメントでラップされているため、ビューが作成される前に破棄されているため、ユーザー オブジェクトには必要なデータがありません。

2 番目のコード例では、関連する Department オブジェクトを明確に呼び出しているため、User オブジェクト内に存在します。

次のようなものを使用して、元の行に Department を熱心にロードする必要があります

context.User.Include(c => c.Department).Find(id);

これで、ユーザー オブジェクトのビューでこれを使用できるようになります。

于 2013-02-25T13:12:15.387 に答える