2017-04-13 4 views
0

나는 아래와 같은 DbContext에서 파생되는 상황이 있습니다패스 연결 문자열

studentContext = new StudentContext(settings.ConnectionString) 

: I에 의해 연결 문자열을 전달하기 위해 노력하고있어

public class StudentContext : DbContext 
{ 
public StudentContext(string connectionString) : base(connectionString) 
{ 
} 
protected override void OnModelCreating(DBModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<StudentContext, StudentMigrations.Configuration>()); 
} 

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

을 설정은 구성 파일을 읽으면 런타임에로드됩니다. this 시도했는데 또한 this.Database.Connection.ConnectionString.In 사용하여 StudentContext 생성자 안에 연결 문자열을 설정했는데 기본 생성자를 제공하거나 구현을 제공하는 예외가 발생합니다. IDbContextFactory 내가 일할 수있는 첫 번째 옵션을 얻을 수 있다면, 코드에 따라서 정적의 사용을 줄이기 위해 노력하고

public class StudentContext : DbContext 
{ 
    public static string ConnectionString; 
public StudentContext(string connectionString) : base(ConnectionString = connectionString) 
{ 
} 

//And also provide a default implementation of the DbContext constructor: 
public StudentContext() : base(ConnectionString) 
{ 
} 

protected override void OnModelCreating(DBModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<StudentContext, StudentMigrations.Configuration>()); 
} 

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

, 즉 큰 것 : 작동하는 유일한 것은 이것이다.

답변

2

MigrateDatabaseToLatestVersion from this answer에 대한 읽기 전용 문자열에 연결 문자열이 캐시됩니다. 방금 클래스를 업데이트해야했습니다.

public class StudentContext : DbContext 
{ 
    public StudentContext(string connectionString) : base(connectionString) 
    { 
    } 

    protected override void OnModelCreating(DBModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<StudentContext, StudentMigrations.Configuration>(true)); //Passing true here to reuse the client context triggering the migration 
    } 

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

엔티티 연결 문자열을 지정해야합니다. DbContext에서

SqlConnectionStringBuilder sqlString = new SqlConnectionStringBuilder() 
     { 
    DataSource = "SOURAV-PC", // Server name 
    InitialCatalog = "efDB", //Database 
      UserID = "sourav",   //Username 
      Password = "mypassword", //Password 
     }; 
     //Build an Entity Framework connection string 

     EntityConnectionStringBuilder entityString = new EntityConnectionStringBuilder() 
     { 
      Provider = "System.Data.SqlClient", 
      Metadata = "res://*/testModel.csdl|res://*/testModel.ssdl|res://*/testModel.msl", 
      ProviderConnectionString = sqlString.ToString() 
     }; 
     return entityString.ConnectionString; 
    }