2014-09-07 2 views
1

MVC5를 EF6과 함께 사용하여 두 개의 응용 프로그램을 하나의 데이터베이스에 배치하고 완전히 별도로 실행할 수 있도록 모든 응용 프로그램 테이블 이름 앞에 접두어를 추가하려고합니다. 두 가지 다른 사용자/역할/클레임/등이 필요하므로 다른 앱에서 이미 존재하는 동일한 AspNet 테이블 이름을 사용할 수 없습니다.접두사 EF6의 모든 테이블 이름

this SO question을 통해 읽은 후, 나는 대답을 발견

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     modelBuilder.Types().Configure(c => c.ToTable("prefix_" + c.ClrType.Name)); 
} 

이 추가 마이그레이션을 사용하여 오류가 발생을, 그래서 오류를 진압하는 나의 방법에

base.OnModelCreating(modelBuilder); 

를 추가했다.

protected override void OnModelCreating(DbModelBuilder modelBuilder) { 
     base.OnModelCreating(modelBuilder); 

     modelBuilder.Types().Configure(c => c.ToTable("prefix_" + c.ClrType.Name)); 

} 

그러나이 유형을 구성 설정 코드의 위 또는 아래에 추가할지 여부에 관계없이 AspNet 테이블은 이름을 전혀 변경하지 않습니다. 형식 구성 줄이 완전히 무시되는 것과 같습니다. 내가 이렇게 할 경우

그것은, 그러나, 잘 이름을 변경 :

물론, 단지 AspNetUsers 테이블을 변경, 그건
modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName"); 

. 다른 모델을 변경하기 위해 어떤 모델을 지정해야할지 모르겠습니다.

내 전반적인 목표는 다음 표를 가지고, 바람직하게는 수동으로 할당 할 필요가 없습니다 : prefix_AspNetRoles prefix_AspNetUserClaims prefix_AspNetUserLogins prefix_AspNetUserRoles prefix_AspNetUsers

을이 외에도, 나는 모든 다른 테이블 내 코드 - 원하는 먼저 동일한 접두사를 갖도록 만듭니다. 이것을 어떻게 할 수 있습니까? 내 코드가 무시되는 이유는 무엇입니까?

답변

3

접두사 대신 스키마를 사용하지 않는 이유는 무엇입니까?

당신은 당신이

modelBuilder.Entity<ApplicationUser>().ToTable("SomeFunkyTableName", "MySecondSchema"); 
+0

감사를 사용할 수있는 테이블 당 스키마를 설정하려면 기본 스키마

modelBuilder.HasDefaultSchema("MySchema"); // Replace MySchema with the name of your prefix 

을 설정하려면 다음을 사용할 수 있습니다. 좋은 아이디어와 완벽하게 작동합니다. SQL Server에 익숙하지 않아 스키마가 새로운 것입니다. 일반적으로 테이블 이름의 접두어를 붙이십시오. – damccull

관련 문제