簡體   English   中英

具有自己的表定義的ASP.NET身份實體框架數據庫第一種方法

[英]Asp.net identity entity framework database first approach with own table defintion

我有以下四個表

角色表

在此處輸入圖片說明

用戶表

在此處輸入圖片說明

UserRole表

在此處輸入圖片說明

UserType表

在此處輸入圖片說明

默認的Asp.net身份具有以下表格,如Asp.netusers,Asp.netRoles,Asp.netuserlogins,Asp.netuserclaims,Asp.netuserroles

我的表格與相同的列名不匹配,並且某些列在我的表格中不可用。 我可以使用自己的表來利用asp.net身份的功能嗎,否則我需要將Asp.netusers表中使用的相同列應用於User表。

這是在表中添加所需的所有列嗎?

我已經使用相同的默認表實現了asp.net身份EF數據庫優先方法。 我有單獨的角色存儲和用戶存儲

在下面的上下文中,用戶,userroles是與asp.net身份相同的默認表(asp.netusers,asp.netroles)

public partial class OVT_UserEntities : DbContext
    {
        public OVT_UserEntities()
            : base("name=OVT_UserEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<UserClaim> UserClaims { get; set; }
        public virtual DbSet<UserLogin> UserLogins { get; set; }
        public virtual DbSet<UserRole> UserRoles { get; set; }
        public virtual DbSet<User> Users { get; set; }
    }

用戶類別:

public partial class User : IUser<int>
    {
    }

角色類別:

public partial class UserRole : IRole<int>
    {
    }

現在我想使用上面的四個新表(上面的表設計圖像),而不是使用asp.net身份提供的現有表。 所以我不確定是否需要在數據庫中添加相同的所有表和列才能使用asp.net身份?

由於您使用的是Microsoft.AspNet.Identity ,因此應該從IdentityUser (命名空間Microsoft.AspNet.Identity.EntityFramework )繼承您的User。

您的類應按以下方式定義:

用戶

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

角色

public class Role : IdentityRole<int, UserRole>
{
}

用戶角色

public class UserRole : IdentityUserRole<int>
{
}

用戶要求

public class UserClaim : IdentityUserClaim<int>
{
}

用戶登錄

public class UserLogin : IdentityUserLogin<int>
{
}

您可以擴展類,添加自己的自定義列:

public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
    public string CompanyName { get; set; }
}

現在,您必須定義商店:

public class UserStore:  UserStore<User, Role, int, UserLogin, UserRole, UserClaim>
{
    public UserStore(MyContext context)
        : base(context)
    {
    }
}

然后是您的數據庫上下文,繼承自IdentityDbContext

public class MyContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
    public MyContext(): base("ConnectionString")
    {

    }
}

在數據庫上下文( MyContext )中,您必須重寫OnModelCreating以便可以創建列,更改類型,表名稱等:

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

        modelBuilder.Entity<MyUser>()
            .Property(p => p.Id)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyRole>()
            .Property(p => p.Id)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyUserRole>()
            .Property(p => p.RoleId)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyUserRole>()
            .Property(p => p.UserId)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyUserClaim>()
            .Property(p => p.Id)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyUserClaim>()
            .Property(p => p.UserId)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyUserLogin>()
            .Property(p => p.UserId)
            .HasColumnType("int")
            .IsRequired();

        modelBuilder.Entity<MyUser>()
            .ToTable("Users");

        modelBuilder.Entity<MyRole>()
            .ToTable("Roles");

        modelBuilder.Entity<MyUserRole>()
            .ToTable("UserRoles");

        modelBuilder.Entity<MyUserClaim>()
            .ToTable("UserClaims");

        modelBuilder.Entity<MyUserLogin>()
            .ToTable("UserLogins");

    }

現在,您可以使用遷移生成表。

我更新了一個github 項目來反映您的情況。

更新

如果要自定義列的名稱和類型,只需給它們命名:

modelBuilder.Entity<User>()
    .Property(p => p.Id)
    .HasColumnName("user_id")
    .HasColumnType("SMALLINT")
    .IsRequired();

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM