sourcetip

ID 열 내에서 ASP.net Identity 2.0의 테이블 이름을 변경하는 방법은 무엇입니까?

fileupload 2023. 8. 1. 20:42
반응형

ID 열 내에서 ASP.net Identity 2.0의 테이블 이름을 변경하는 방법은 무엇입니까?

저는 수년간 ASP.net 멤버십을 사용해 왔으며 이제 막 ASP.net Identity를 사용하기 시작했습니다.그들은 방금 버전 2.0을 출시했으며, 이 버전은 다음을 지원해야 합니다.int기본 키정수 기본 키 지원을 받기 위해 사용자 지정 ID 클래스를 다음과 같이 정의했습니다.

public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{  
}

public class UserLogin : IdentityUserLogin<int>
{
}

public class Role : IdentityRole<int, UserRole>
{
    public string Description { get; set; }  // Custom description field on roles
}

public class UserRole : IdentityUserRole<int>
{
}

public class UserClaim : IdentityUserClaim<int>
{
}

public class MyDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
    public MyDbContext() : this("MyDB") { }

    public MyDbContext(string connStringName) : base(connStringName)
    {
        this.Configuration.LazyLoadingEnabled = false;
        this.Configuration.ProxyCreationEnabled = false;
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

        modelBuilder.Entity<User>().ToTable("Users");
        modelBuilder.Entity<Role>().ToTable("Roles");
        modelBuilder.Entity<UserRole>().ToTable("UserRoles");
        modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
        modelBuilder.Entity<UserClaim>().ToTable("UserClaims");

        base.OnModelCreating(modelBuilder);
    }
}

데이터베이스 마이그레이션을 만들 때 각 ID 테이블에 대해 정수 Id 열이 올바르게 생성되지만, 데이터베이스 마이그레이션에서 지정된 사용자 지정 테이블 이름은 무시됩니다.OnModelCreating방법.대신 다음과 같은 테이블 이름을 얻습니다.dbo.AspNetUsers그리고.dbo.AspNetRoles.

나는 또한 추가를 시도했습니다.[Table("TableName")]사용자 지정 ID 클래스에 적용되지만 아무런 효과가 없습니다.

ASP.net Identity 1.0의 예를 보면, 그들은 각각 반복하는 것처럼 보였습니다.modelBuilder.Entry<Type>().ToTable("TableName")기본 ID 클래스를 사용하는 선:

modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<IdentityUser<int, IdentityUserLogin<int>, IdentityUserRole<int>, IdentityUserClaim<int>>>().ToTable("Users");

modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<IdentityRole<int, UserRole>>().ToTable("Roles");

modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles");

modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins");

modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims");

하지만 몇 가지 변형을 시도했지만 마이그레이션이 생성되지 않았습니다.Microsoft 유형과 유사한 오류가 계속 발생했습니다.AsNet.정체성.엔티티 프레임워크입니다.아이덴티티사용자'4[시스템].Int32, 마이크로소프트.AsNet.정체성.엔티티 프레임워크입니다.IdentityUserLogin'1[시스템].Int32, Microsoft.AsNet.정체성.엔티티 프레임워크입니다.ID 사용자 역할'1[시스템].Int32, Microsoft.AsNet.정체성.엔티티 프레임워크입니다.ID 사용자 클레임'1[시스템.Int32]]'이(가) 매핑되지 않았습니다. 무시 방법 또는 매핑되지 않은 특성 데이터 주석을 사용하여 유형이 명시적으로 제외되지 않았는지 확인합니다. 형식이 클래스로 정의되었으며 기본 또는 일반이 아니며 EntityObject에서 상속되지 않는지 확인합니다.

ASP.net Identity 2.0에서 정수 기본 키로 사용자 지정 테이블 이름을 생성하려면 어떻게 해야 합니까?

으으...그래서 이것에 몇 시간을 낭비한 후에, 저는 제 규칙을 복사하고 그것들을 아래에 붙였습니다.base.OnModelCreating(modelBuilder);라인과 모든 것이 정상적으로 작동했습니다.베이스 메소드가 먼저 호출될 필요가 있다는 것을 깨닫지 못했습니다.

이제 다음 구성을 사용하여 모든 것이 제대로 작동합니다.

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder); // This needs to go before the other rules!

    modelBuilder.Entity<User>().ToTable("Users");
    modelBuilder.Entity<Role>().ToTable("Roles");
    modelBuilder.Entity<UserRole>().ToTable("UserRoles");
    modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
    modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
}

IdentityModel.cs 파일에서 다음 코드를 추가했습니다.ApplicationDbContext학급

모델 이름이 수락된 답변에 나열된 이름과 다릅니다.

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

        modelBuilder.Entity<ApplicationUser>().ToTable("SystemUsers");
        modelBuilder.Entity<IdentityRole>().ToTable("SystemRoles");
        modelBuilder.Entity<IdentityUserRole>().ToTable("SystemUserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("SystemUserLogins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("SystemUserClaims");
    }

언급URL : https://stackoverflow.com/questions/22855428/how-to-change-table-names-for-asp-net-identity-2-0-with-int-id-columns

반응형