Nice programing

Entity Framework Migrations 4.3을 사용할 때 데이터베이스 이름을 명시 적으로 지정하는 방법

nicepro 2020. 12. 10. 21:09
반응형

Entity Framework Migrations 4.3을 사용할 때 데이터베이스 이름을 명시 적으로 지정하는 방법


최근에 Entity Framework 마이그레이션을 사용하기 시작했으며 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을 지정해야하는 이유는 다중 레이어 프로젝트 설정이 있기 때문이라고 생각합니다. 마이그레이션 구성 파일은 내 '데이터'프로젝트에 있고 엔티티 / 모델은 내 '도메인'프로젝트에 있습니다. 또한 이전에 사용했던 Global.asax.cs 파일에는 현재 초기화 옵션이 없습니다. 코드 우선 ef 4.2. 따라서 내 프로젝트에는 데이터 프로젝트에 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

끝없이 타이핑하는 것을 좋아한다면 쉬운 피지.


연결 문자열을 웹 사이트 프로젝트의 web.config에 저장하고 다른 프로젝트의 DBContext 및 마이그레이션 파일에 저장하면서도 동일한 연결 문자열을 공유 할 수 있습니다. 그러나 데이터 프로젝트 (또는 그 안에 DBContext 등이있는 모든 프로젝트)를 패키지 관리자 콘솔의 기본 프로젝트로 설정하는 것뿐만 아니라 웹 사이트가 기본값으로 설정되어 있는지 확인해야합니다. 시작 프로젝트 !!!

이 문서는 어디에서도 볼 수 없지만, 내 마이그레이션이 갑자기 SQLExpress db에 적용되는 이유를 파악하지 못한 채 24 시간 동안 열광적으로이 결론에 도달했습니다.


Nuget의 최신 EF5로 시도했습니다.

그러나 Update-Database내용을 읽어하지 않습니다 App.config(단지 대답 일년 전 같은) 마이그레이션을 포함하는 프로젝트에서하지만 읽기만 *.config에서 시작 프로젝트 . 훌륭하지만 여기에서 적절한 연결 문자열을 찾는 방법 Add-MigrationUpdate-Database발견했습니다.

  1. 먼저 "DefaultConnection"연결 문자열을 가져 오려고합니다.
  2. 그런 다음 컨텍스트 클래스 이름을 기반으로 연결 문자열 이름을 가져 오려고합니다. 예를 들어 "MyContext"연결 문자열 이름을 사용할 수 있도록 MyContext파생 된 클래스가 DbContext있습니다. 여러 db 연결이있을 때 유용합니다.
  3. 위의 연결 문자열 이름을 모두 찾을 수없는 경우 -ConnectionStringName매개 변수 를 제공하지 않으면 실패하고 "DefaultConnection"연결 문자열이 표시되지 않습니다 . 참조 get-help Update-Database패키지 관리자 콘솔에서 도움말 페이지를 볼 수 있습니다.

재시도 또는 폴백 시도가 없으므로 "DefaultConnection"에 잘못된 연결 문자열이 포함되어 있으면 오류 만 표시됩니다.

연결 문자열에 DefaultConnection 및 컨텍스트 이름이 모두있는 경우 DefaultConnection이 우선합니다.

I would prefer #2 become the first try because the name is more specific but the above steps is what EF5 Migrations do when trying to connect to the db.

참고URL : https://stackoverflow.com/questions/9327409/how-to-explicitly-name-the-database-when-using-entity-framework-migrations-4-3

반응형