1

エラー: ディクショナリに渡されたモデル アイテムのタイプは 'System.Data.Entity.Infrastructure.DbQuery (中略) ... 'Advocate' のタイプを探しています

コントローラ メソッドは次のようになります。

[HttpGet]
public ActionResult AdvocateEdit(int id)
{
    var advocate = from a in db.Query<Advocate>().Include(a => a.AdvocateId)
                   where (a.AdvocateId == id)
                   select a;

    return View(advocate);
}

ビューは確かに Advocate @model に入力されており、ステップスルーした後、問題はこのクエリにあると確信しています。戻るときは Advocate 型である必要があります。

db.Query is an IQueryable<T> method in my DbContext that returns Set<T>().

さらに情報が必要な場合はお知らせください。ありがとう

追加した - -

DbContext.cs

public interface IAcmeDb : IDisposable
{
    IQueryable<T> Query<T>() where T : class;
}

public class AcmeDb : DbContext, IAcmeDb
{
    public AcmeDb() : base("name=AcmeDB") {}
    public DbSet<Advocate> Advocates { get; set; }

    IQueryable<T> IAcmeDb.Query<T>()
    {
         return Set<T>();
    }
}
4

3 に答える 3

4

クエリ自体ではなく、ビューに Advocate 要素を渡したいと思います。これを試して:

return View(advocate.First());

コード内の Advocate オブジェクトは IQueryable 型です。ビューが Advocate オブジェクトを想定している場合は、First() または FirstOrDefault() を使用してクエリの最初の要素を取得するだけです。

于 2013-07-30T22:52:12.817 に答える
3

ビューに単一のAdvocateエンティティが必要で、特定の ID に対してエンティティが常に 1 つしかない場合は、次のようにします。

[HttpGet]
public ActionResult AdvocateEdit(int id)
{
   try
   {
       Advocate advocate = db.Query<Advocate>().Single(a => a.AdvocateId == id);
       return View(advocate);
   }
   catch(InvalidOperationException ex)
   {
      //handle the case where no entity matches the supplied id (return status code 404?), or
      //there are no Advocates at all (redirect to a create page?), or
      //more than one entity matches (return status code 500)
   }
}
于 2013-07-30T23:30:31.597 に答える