0

내가 아주 기본적인 모델 클래스Entity Framework 코드 우선 접근 방식에서 연결 문자열이 만들어지지 않는 이유는 무엇입니까?

class Student 
{ 
    public int StudentID { get; set; } 
    public string Ad { get; set; } 
    public string Soyad { get; set; } 
} 

class StudentContext: DbContext 
{ 
     public StudentContext() :base("StudentDB") 
     { 
     } 

     public DbSet<Student> Students { get; set; } 
} 

나는 또한 콘솔 응용 프로그램과 ASP.NET MVC 모두 시도했습니다 아주 기본적인 DbContext 클래스가 (아니 DB가 생성) 5 프로젝트. 둘 다 작동하지 않습니다 :/

응용 프로그램을 빌드하고 실행해도 데이터베이스가 생성되지 않습니다. 내가 검사 할 때 기본 생성자에서 DB Name에 대한 매개 변수를 전달하기는했지만 app.config 또는 web.config에는 연결 문자열이 삽입되지 않는다는 것을 알았습니다.

Entity Framework Nuget 패키지는 각 평가판을 설치하기 전에 설치되었으며 EF는 이전 데이터베이스의 첫 번째 프로젝트에 올바르게 작동했습니다. 나는 왜 처음에 데이터베이스를 만들 수 없는지 전혀 모른다. 난 콘솔 프로젝트의 Main() 기능에 다음 줄을 추가하려고 :

StudentContext ctx = new StudentContext(); 
ctx.Database.CreateIfNotExists(); 

작동하지 않았다 :/

+0

먼저, 패키지 (엔티티)를 업데이트하고 요에 마이그레이션 패키지를 추가 통해 UR 프로젝트. 'web.config'가 괜찮은지 확인하십시오. 이 방법을 사용해보고 도움이되는지보십시오. – pnet

답변

0

는 어디 말 않는다는 DbContext (문자열) app.config에 연결 문자열을 만들까요? DbContext class의 비고 섹션에서 연결 문자열을 설명합니다. 그러나 DbContext 클래스가 app.config를 조정하지 않는다고합니다.

app.config를 변경하면 바람직하지 않은 동작입니다. 하나의 데이터베이스에서 다른 데이터베이스로 데이터를 복사하는 것과 같이 동일한 DbContext가 두 개의 유사한 데이터베이스를 제어하도록하려면 어떻게해야할까요? 당신의 app.config에 연결 문자열을 작성하려는 경우

dbContext.Database.Connection.ConnectionString; 

, 당신이에 대한 확장 기능을 쓸 것이다 좋을 것 :

는 DbContext 인스턴스 사용을 만든 후 연결 문자열을 얻으려면 그것은 :

static class DbContextExtensions 
{ 
    public static void SaveConnectionString (this DbContext dbContext) 
    { 
     string connectionString = dbContext.Database.Connection.ConnectionString; 
     SaveConnectionString(connectionString); 
    } 
    private static void SaveConnectionString(string connectionString) 
    { // save the string where you want it, for instance app.config 
     // out of scope of this question 
    } 
} 

사용

using(var dbConext = new StudentContext("..."); 
{ 
    dbContext.SaveConnectionString(); 
} 
0

다른 옵션이 될 것이다 - "이니셜을". 당신이 중 하나를 사용하기 시작 응용 프로그램에 대한 데이터베이스를 만들려면 :

context.Database.Initialize(true); 

을하지만 사용할 때 당신은 사용할 수 없습니다 "이니셜"

ctx.Database.CreateIfNotExists();