2016-09-23 2 views
0

엔터티 프레임 워크를 통해 MVC 프로젝트에 성공적으로 연결된 브라우저에서 데이터베이스를 보려고합니다.데이터베이스에 연결을 시도하고 Entity Framework로 현재보기를 시도합니다. 컨트롤러의 dbContext 오류 발생

그러나 일부 실행을 실행하려고 할 때 내 컨트롤러에서 dbContext에 적용되는 문을 사용하여 오류가 계속 발생합니다.

처음에 데이터베이스에 연결했을 때 모델 생성 당시 만들어진이 db.context가 생성 된 것으로 가정합니다. 다른 곳에서 온 코드의 주석에도 불구하고 MyDatabaseEntitiesdbContext으로 모델 생성시 생성됩니다. 어떤 이유로 나는 지루하게 Model1라고 불리는 컨텍스트를 사용하려고 시도했지만 그것을 인식하지 못합니다.

이유가 누구인지 아시겠습니까? 누구든지이 문제를 바로 잡도록 도와 주실 수 있습니까? 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을 마우스 오른쪽 버튼으로 클릭하면 표시되는 상황에 맞는 메뉴에 Resolve 항목이 표시됩니다. 그렇다면 옵션을 사용하여 참조를 해결하십시오. Resolve 항목이 표시되지 않으면 해당 프로젝트 참조에 존재하지 않는다는 의미입니다. 새 프로젝트 참조를 추가하거나 그렇지 않은 이유를 파악해야합니다. 예를 들어, 다른 프로젝트의 클래스 라이브러리에서 참조하는 경우, 클래스 라이브러리가 빌드에 실패하면 다른 프로젝트는 해당 클래스 라이브러리에 대한 참조가 있어도 참조를 찾을 수 없습니다.

모든 문제는 여기에 문제가 발생할 수있는 특정 사항이 있습니다. 먼저 문맥에 using을 절대 사용하지 않아야합니다. 컨텍스트가 폐기 된 후 오래 지내며 코드에서 기본적으로 시한 폭탄이되는 지연로드 코드와 같은 것이 있기 때문에 거의 항상 재앙의 방법입니다. 대신 컨트롤러에 개인/보호 된 필드를 만들거나 컨텍스트를 컨트롤러에 주입하기 위해 종속성 주입을 사용하는 것이 좋습니다.

public class FooController : Controller 
{ 
    private readonly DbContext db; 

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

어느 쪽이든 (물론 선택의 DI 컨테이너 구성 코드와 결합) 필드를

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

의존성 삽입 (Dependency Injection)가, 당신의 상황에 맞는 것 요청이 끝날 때까지 살아 있어야하며 런타임을 생성하지 않습니다. 컨텍스트가 삭제 된 후에 데이터베이스에 도달하려고 시도하는 오류

두 번째로, EDMX를 멀리해야합니다. 그것은 비추천이고, 그렇지 않은 경우에도, 그것은 단지 사후에 통증이 있고 솔직하게 통증입니다. POCO와 컨텍스트를 사용해야하며 "코드 우선"이라고 오해 할 수 있습니다. 그러나 이름에도 불구하고 코드 첫 번째는 기존 데이터베이스와 마찬가지로 쉽게 작업 할 수 있습니다. 솔직히 다른 것을 사용하는 이유가 없습니다.기존 데이터베이스로 작업하는 경우 해당 데이터베이스를 설정하는 방법을 자세히 설명한 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

관련 문제