2016-09-23 8 views
0

エンティティフレームワークを介してMVCプロジェクトに正常に接続したブラウザでデータベースを表示しようとしています。データベースに接続しようとしていて、Entity Frameworkで表示しています。

しかし、いくつかの実行をプリフォームしようとすると、コントローラのdbContextに適用されているusingステートメントでエラーが発生し続けます。

私が聞いたこのdb.contextは、最初にデータベースに接続したときにモデル作成時に作成されるはずです。他の場所から来たコードのコメントでも、MyDatabaseEntitiesdbContextであり、モデル作成時に作成されています。何らかの理由で私は退屈にModel1と呼ばれるコンテキストを使用しようとしましたが、それを認識していません。

これはなぜですか?誰でもこの問題を解決するのを助けてくれますか? enter image description here

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 

namespace WebApplication6.Controllers 
{ 
    public class UserController : Controller 
    { 
    // 
    // GET: /User/ 

    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult GetUser() 
    { 
     return View(); 
    } 

    public JsonResult GetAllUser() 
    { 
     List<Location> allUser = new List<Location>(); 


     // Here "MyDatabaseEntities " is dbContext, which is created at time of model creation. 

     using (Model1 dc = new Model1()) 
     { 
      allUser = dc.UserMasters.ToList(); 
     } 

     return new JsonResult { Data=allUser, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 
    } 
    public JsonResult GetUserWithParameter(string prefix) 
    { 
     List<Location> allUser = new List<Location>(); 


     // Here "MyDatabaseEntities " is dbContext, which is created at time of model creation. 

     using (Model1 dc = new Model1()) 
     { 
      allUser = dc.UserMasters.Where(a => a.Username.Contains(prefix)).ToList(); 
     } 

     return new JsonResult { Data = allUser, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; 
    } 

} 

}

+0

エラーは何ですか?赤い波状の部分にカーソルを合わせるか、エラーリストウィンドウを表示します。たぶんあなたの名前空間に 'using'ステートメントが必要です。 – Crowcoder

+0

Model1()コードを表示します。 –

答えて

1

Model1は波線赤を持っている場合、それは任意のプロジェクト参照には存在しないか、および/または名前空間は、現在のファイルに含まれていないので、それはです。

コードでModel1を右クリックすると、表示されるコンテキストメニューにResolveという項目が表示されます。そうした場合は、そのオプションのonを使用して参照を解決してください。 Resolveアイテムが表示されない場合は、それがプロジェクト参照のいずれにも存在しないことを意味します。新しいプロジェクト参照を追加するか、そうでなければそれが存在しない理由を理解する必要があります。たとえば、別のプロジェクトのクラスライブラリからの参照をしている場合、クラスライブラリがビルドに失敗した場合、そのクラスライブラリへの参照を持っていても他のプロジェクトは参照を見つけることができません。

ここには、問題を引き起こす原因がいくつかあります。まず、コンテキストにusingを使用することはほとんどありません。コンテキストが破棄されてからずっと長く生きるレイジーローディングコードのようなものがあり、基本的にはあなたのコードの時限爆弾になるので、ほとんど常に災害のレシピです。その代わりに、あなたのコントローラにプライベート/プロテクトフィールドを作成するか、または依存プラグインを使用してコントローラにコンテキストを注入する必要があります。 (もちろん、お好みのDIコンテナの構成コードと組み合わせる)

フィールド

public class FooController : Controller 
{ 
    private readonly ApplicationDbContext db = new ApplicationDbContext(); 

依存性注入

public class FooController : Controller 
{ 
    private readonly DbContext db; 

    public class FooController(DbContext db) 
    { 
     this.db = db; 
    } 

いずれかの方法で、あなたのコンテキストはなります要求の存続期間中は生きていて、実行時は生成されませんコンテキストが破棄された後にデータベースにヒットしようとする何かのエラー。

第2に、あなたは本当にEDMXから離れるべきです。それは非難され、たとえそうでなくても、それは後ろの脆弱で率直に痛みです。 POCOとコンテキストを使用するだけでいいです。アプローチは誤って「コードファースト」と呼ばれます。しかし、名前にもかかわらず、Code Firstは既存のデータベースと同じように簡単に作業できます。率直に言って、他の何かを使う理由はありません。既存のデータベースを使用している場合は、その設定方法を詳しく説明しているpostがあります。

+0

私は間違いなく次回はedmxから離れたいと思っていますが、今回はVisual Studioのデータベースエンティティフレームワークの関係を通して私のために生成されています。モデル1の名前を解決します。私はあなたのサイトを見て、どのようにして最初に使用コードを並べ替えてからそれに接続することができるのですか?私はそれを正しく行う方法を知っているかどうかわかりません、あなたに私の間違ったやり方を見せるのではなく、私が使用した例からあなたに正しい道を示してはいけません。より良い? http://www.dotnetawesome.com/2014/05/how-to-retrieve-database-data-show-using-jquery-mvc-asp.html – evan

+0

私はこれでとても新しいです。私はちょうどデータベースに既にあるストアドプロシージャを介してデータを表示できるようにしたい。 – evan

関連する問題