0

MVC 응용 프로그램, VS 2013에서 Identity 2.0 사용. 회원 시스템에서 사용하는 내장 테이블 중 일부를 확장하고 새 테이블을 추가하려고합니다. 전자는 잘 작동합니다. IdentityModels.cs에서 ApplicationUser에 몇 가지 새 속성을 추가하면 이러한 변경 내용이 자동으로 AspNetUsers 테이블로 마이그레이션됩니다. 내가 알 수있는 한, 이것은 IdentityDbContext에서 상속받은 ApplicationDBContext의 정적 생성자에 의해 설정되며, DbInitializer는 DropCreateDatabaseIfModelChanges를 기반으로합니다. 따라서 ApplicationUser를 변경하면 데이터베이스를 삭제하고 다시 만들 수 있습니다. 정확히 원하는 것입니다.Identity 2.0 코드 첫 번째 자동 마이그레이션

설명과 같이 ASPNetRoles 테이블에 무언가를 추가하려면 이유를 모르겠지만 IdentityRole에서 상속받은 클래스를 만들어 새 속성을 추가하면됩니다. 거기에 새로운 Role 하위 클래스로 ApplicationRoleManager를 wor로 변경했습니다. 이 새 클래스에서 변경 사항을 작성하면 이것도 데이터베이스로 마이그레이션됩니다. 어떻게 된거 야? 그리고이 Discriminator 필드는 무엇을 추가합니까?

내 진짜 질문은 이것입니다. 그리고 나는이 다른 마이그레이션이 어떻게 작동하는지 잘 모르기 때문에 대답을 모른다 고 생각합니다. Identity 2.0에서 사용하는 표준 5에 어떻게 새 테이블을 추가 할 수 있습니까? 변경 될 때 처음에 생성되고 마이그레이션 되었습니까? 패키지 관리자를 사용하고 이러한 새 테이블에 대한 마이그레이션을 추가해야합니까? 아니면 다른 테이블로 자동 마이그레이션 할 수 있습니까?

감사

레이

답변

1

당신이 클래스 IdentityDbContext<TUser, TRole, TKey, TUserLogin, TUserRole, TUserClaim>에서 살펴 봐야 개체 브라우저를 사용하는 경우, 당신은 그것이 IDbSet<TRole> Roles을 가지고 있음을 알 수있다. ApplicationRoleManager으로 전달하는 역할 유형이 여기까지 내려 가고 EF가 새로운 수업에 대해 알고있는 방식입니다.

Discriminator 열은 TPH (테이블 계층 구조)가 사용 중일 때 EF가 기본적으로 생성하는 것입니다. EF는 동일한 테이블에 저장된 여러 유형을 구별 할 수 있습니다.

테이블을 ApplicationDbContext에 추가하려면 해당 테이블에 DbSet을 작성하기 만하면됩니다. 예를은 ... DropCreateDatabaseIfModelChanges intializer를 사용

public class ApplicationDbContext : IdentityDbContext<ApplicationUser> 
{ 
    public ApplicationDbContext() 
     : base("DefaultConnection", throwIfV1Schema: false) 
    { 
     Database.SetInitializer<ApplicationDbContext>(new DropCreateDatabaseIfModelChanges<ApplicationDbContext>()); 
    } 

    public DbSet<Product> Products { get; set; } 
    public DbSet<Order> Orders { get; set; } 

} 

때문에, 데이터베이스를 닦고 때마다 모델 변경을 업데이트해야합니다.

+0

안녕하세요. 나는 너의 포스트를 읽기 전에 그것을 또한 얻었다. 나는이 코드가 처음 나에게 새롭기 때문에 주로 데이터베이스의 첫 번째 작업을 해왔다. 이러한 변화를 감지하는 코드가 정적 인 constructor에 있다는 것은 흥미 롭습니다. 따라서 실행되지 않는 앱을 ​​실행하고 닫습니다. 최고의 레이 – RBrowning99