2017-11-14 23 views
0

간단한 프로젝트를 구현하기 위해 ASP.NET MVC 5 프레임 워크를 사용하고 있습니다. 이 프로젝트에서 아이덴티티 프레임 워크 테이블 (사용자, 역할 등)과 사용자 정의 테이블 (학생, 집주인 등)을 사용하고 싶습니다. 뿐만 아니라잘못된 개체 이름을 가져 오지 않고 Identity Framework 테이블 및 사용자 지정 테이블을 채우는 방법

public void PopulateAspNetTables() 
    { 
     context = new ApplicationDbContext(); 

     // Define Users and insert them to IF database : 
     // ********************************************** 
     var passwordHash = new PasswordHasher(); 
     string password = passwordHash.HashPassword("[email protected]"); 

     ApplicationUser user1 = new ApplicationUser 
     { 
      UserName = "user1", 
      Email = "[email protected]", 
      PasswordHash = password 
     }; 
     context.Users.AddOrUpdate(user1); 
     context.SaveChanges(); 
    } 

:

나는 또한 어떤 값으로 테이블을 초기화하고 싶습니다 그러므로 나는 나의 홈 컨트롤러에 다음과 같은 기능을 추가

public void PopulateOurDatabase() 
    { 

     dbCntxt = new DatabaseContext(); 

     stdnt = new Student {StudentID = 1, FirstName = "FN", LastName = "LN", Age = 27, Sex = "Male", ContactNumber = "123456", Email = "[email protected]", AcademicYear = 1, AcademicDegree = "Electrical Engineering", AcademicSubject = "blabla" }; 
     dbCntxt.Students.AddOrUpdate(stdnt); 
     dbCntxt.SaveChanges(); 

앞의 두 가지 기능을 것입니다 홈 컨트롤러 생성자에서 호출 할 수 있습니다.

public class HomeController : Controller 
    { 
    private DatabaseContext dbCntxt; 
    private ApplicationDbContext context; 


    private Student stdnt; 


    public HomeController() 
    { 

     PopulateOurDatabase(); 
     PopulateAspNetTables(); 
    } 
.... 
.... 
} 

이제 probl 그들을 내가 생성자에서이 함수를 호출 할 때마다 두 번째는 항상 오류가 발생하는 동안, 첫 번째가 제대로 작동하는지입니다 :

SqlException: Invalid object name 'dbo.AspNetUsers'. 

내가 함수를 호출하는 순서를 변경하는 경우, AspNetUsers 테이블 것 나는 학생 테이블에 관해서도 똑같은 오류가 발생한다. 이것은 서버 탐색기에서 명확하게 볼 수 있습니다!

왜 그런 일이 발생합니까?

나는 내 자신의 컨텍스트를 만들었으므로 두 개의 다른 컨텍스트를 사용하기 때문에 이런 현상이 발생합니까? 이 경우 가장 좋은 방법은 무엇입니까?

감사합니다.

답변

0

내 질문에 대한 대답을 찾은 것 같습니다. 일부 테스트 이유로 인해 연결 문자열의 InitialCatalog 부분을 제거하고 다시 추가하는 것을 잊었습니다. 여기저기서 많이 파고 들자 나는 두 개의 서로 다른 컨텍스트를 사용하고 있기 때문에 어떤 데이터베이스로 시작할지를 응용 프로그램에 알려줘야한다는 것을 알게되었습니다. 따라서 초기 카탈로그 부분 이어야합니다.

0

나는 테스트하지 않았지만 "연결"키워드를 사용하여 각 연결을 닫습니다.

public void PopulateOurDatabase() 
{ 
    using (dbCntxt = new DatabaseContext()) 
    { 
    stdnt = new Student {StudentID = 1, FirstName = "FN", LastName = "LN", 
    Age = 27, Sex = "Male", ContactNumber = "123456", Email = 
    "[email protected]", AcademicYear = 1, AcademicDegree = "Electrical 
    Engineering", AcademicSubject = "blabla" }; 
    dbCntxt.Students.AddOrUpdate(stdnt); 
    dbCntxt.SaveChanges(); 
    } 
+0

불행히도 이것은 작동하지 않았습니다. – Rashedkoutayni