226

Visual Studio 2013 (MSDN 2013-10-18 からダウンロード) のリリース バージョン (RC ではなく RTM) を使用しているため、AspNet.Identity の最新 (RTM) バージョンを使用しています。新しい Web プロジェクトを作成するとき、認証に「個々のユーザー アカウント」を選択します。これにより、次のテーブルが作成されます。

  1. AspNetRoles
  2. AspNetUserClaims
  3. AspNetUserLogins
  4. AspNetUserRoles
  5. AspNetUsers

(既定のテンプレートを使用して) 新しいユーザーを登録すると、これらのテーブル (上記のリスト) が作成され、AspNetUsers テーブルに以下を含むレコードが挿入されます。

  1. ID
  2. ユーザー名
  3. パスワードハッシュ
  4. セキュリティスタンプ
  5. 識別器

さらに、クラス「ApplicationUser」にパブリック プロパティを追加することで、「FirstName」、「LastName」、「PhoneNumber」などのフィールドを AspNetUsers テーブルに正常に追加できました。

これが私の質問です。上記のテーブルの名前を変更する方法はありますか (それらが最初に作成されたとき)、または上記のように常にAspNetプレフィックスで名前が付けられますか? テーブル名に別の名前を付けることができる場合は、その方法を説明してください。

- アップデート -

@Hao Kung のソリューションを実装しました。新しいテーブルが作成されますが (たとえば、MyUsers と呼びます)、AspNetUsers テーブルも作成されます。目標は、「AspNetUsers」テーブルを「MyUsers」テーブルに置き換えることです。以下のコードと、作成されたテーブルのデータベース イメージを参照してください。

実際には、各AspNetテーブルを自分の名前に置き換えたいと思います... fxample、MyRoles、MyUserClaims、MyUserLogins、MyUserRoles、および MyUsers の場合。

これを達成し、最終的に 1 セットのテーブルだけになるにはどうすればよいですか?

public class ApplicationUser : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address1 { get; set; }
    public string Address2 { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string PostalCode { get; set; }
    public string PhonePrimary { get; set; }
    public string PhoneSecondary { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext(): base("DefaultConnection")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
    }
}

データベース テーブル

-- 回答を更新 --

Hao Kung と Peter Stulinski の両方に感謝します。これは私の問題を解決しました...

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

        modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
        modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
    }
4

7 に答える 7

65

以下は私の実用的なソリューションです:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

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

        modelBuilder.Entity<ApplicationUser>().ToTable("User");
        modelBuilder.Entity<IdentityRole>().ToTable("Role");
        modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
        modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
        modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

詳しくはこちらをご覧ください

于 2015-06-30T10:17:40.960 に答える
15

DbContext クラスでこのメソッドをオーバーライドして、選択したテーブルにマップすることができます。

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<IdentityUser>()
            .ToTable("AspNetUsers");
于 2013-10-19T00:06:24.153 に答える