최근 엔티티 프레임 워크 마이그레이션을 사용하기 시작했으며 Update-Database
명령을 실행할 때 데이터베이스 이름이 자동으로 업데이트되지 않는다는 사실을 알게되었습니다.
내 연결 고리는 :
<connectionStrings>
<add name="DataContext" connectionString="Server=.\SQLEXPRESS;Initial Catalog=TestDB;Trusted_Connection=Yes;" providerName="System.Data.SqlClient" />
</connectionStrings>
Update-Database를 처음 실행하면 데이터베이스가 올바른 이름의 TestDB로 만들어집니다. 그러나 프로젝트 이름을 시작하기 전에 다중 엔티티 중 하나를 변경하면 더 이상 업데이트되지 않습니다. 다중 프로젝트 솔루션을 사용하고 있습니다.
Update-Database -StartUpProjectName "TestDB.Data"
그러면 마이그레이션이 항상 계속 사용되는 또 다른 새 데이터베이스가 생성됩니다. StartUpProjectName 명령을 넣지 않아도되지만 생성되는 데이터베이스의 기본 이름을 재정의하는 방법이 있습니까? 항상 데이터베이스를 다음과 같이 만듭니다.
TestDB.Data.DataContext
StartUpProject 이름을 전달할 때 생성 된 데이터베이스가 TestDB로만 호출 되는지 또는 StartUpProjectName 설정을 사용하는 데있어 제한 사항인지 확인하는 방법이 있습니까?
참고로, StartUpProjectName을 지정해야하는 이유는 다중 레이어 프로젝트 설정이 있다는 것입니다. Migrations Configuration 파일은 내 'Data'프로젝트에 있고 엔티티 / 모델은 내 'Domain'프로젝트 등에 있습니다. 이전에 사용했던 것처럼 Global.asax.cs 파일에 초기화 옵션이 없습니다 코드 첫 ef 4.2. 그래서 내 프로젝트에서 나는 DataContext와 DataContext를 그 프로젝트에 가지고있다.
편집하다:
원래이 질문을 설정 한 이후로 나는 다중 경로 솔루션에서 데이터베이스를 명명하는 '올바른'방법을 발견했습니다. 아래의 답변이 효과가 있지만 이상적인 솔루션이 아닌 다른 영역에서 web.config를 복제한다는 의미입니다. 대신이 같은 일을하면 DbContext에 이름을 넣을 수 있습니다 (DataContext는 프로젝트에서 사용한 이름입니다).
public class DataContext : DbContext
{
public DataContext() : base("DatabaseNameHere")
{ }
public DbSet<Table1> Table1 { get; set; }
public DbSet<Table2> Table2 { get; set; }
public virtual void Commit()
{
base.SaveChanges();
}
}
감사,
풍부한
update-database
를 수행 할 때 마이그레이션이 포함 된 프로젝트를 지정해야합니다. 해당 프로젝트에 올바른 연결 문자열이 포함 된 app.config
파일이 있는지 확인하십시오.
여러 프로젝트에서 응용 프로그램을 분할 할 때 응용 프로그램을 실행할 때 사용 된 연결 문자열이 시작된 프로젝트 중 하나입니다. 마이그레이션 할 때 사용되는 연결 문자열은 마이그레이션이 포함 된 프로젝트 중 하나입니다.
비슷한 설치를 할 때 두 곳에서 연결 문자열을 추가해야했습니다. 조금 어색하지만 작동합니다.
app.config에서 매개 변수로 제공하여 관리하지 않아도됩니다.
Update-Database -Verbose
-ConnectionString "CONNECTIONSTRING"
-ConnectionProviderName "System.Data.SqlClient"
-StartupProjectName WEBSITE_PROJECT -ProjectName MIGRATION_PROJECT
당신이 끝없이 타이핑하는 것을 좋아한다면, 쉬운 압전.