【问题标题】:Change table name Identity with Fluent Api使用 Fluent Api 更改表名身份
【发布时间】:2016-07-13 17:23:09
【问题描述】:

在我的项目中,我使用 Identity。 Identity 的默认设置是在数据库中使用它们的名称创建表。我想把这些名字改成我的名字。

我正在使用 Fluent Api 来配置创建 Identity 的表,例如:

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public string TableName
    {
        get { return "Users"; }
    }
    public UserConfiguration()
    {
        this.ToTable(TableName);
        HasKey(u => u.ProviderId);
    }
} 


public class UserClaimsConfiguration : EntityTypeConfiguration<IdentityUserClaim>
{
    public string TableName
    {
        get { return "UserClaims"; }
    }
    public UserClaimsConfiguration()
    {
        this.ToTable(TableName);
        HasKey(u => u.Id);
    }
}

在上下文中,我将上面的配置添加到 DB:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Configurations.Add(new UserConfiguration());
    modelBuilder.Configurations.Add(new RolesConfiguration());
    modelBuilder.Configurations.Add(new UserClaimsConfiguration());
    modelBuilder.Configurations.Add(new UserLoginsConfiguration());
    modelBuilder.Configurations.Add(new UserRoleConfiguration());            
}

之后我进行了迁移和更新数据库 –TargetMigration: RenameTablesInDB。

但我发现了一个错误:

找不到对象“dbo.AspNetUserClaims”,因为它不存在或您没有权限。

【问题讨论】:

    标签: entity-framework identity


    【解决方案1】:

    我解决了我的问题。 当您使用 fluent api 重新定义身份的表名时。您必须设置一些强制性设置。

    IdentityRole 中的行

    this.HasKey<string>(r => r.Id); // It's row decision
    

    IdentityLoginsConfiguration 中也是行

    HasKey<string>(l => l.UserId);
    

    和身份用户角色

    HasKey(r => new { r.RoleId, r.UserId });
    

    现在大家在一起。 我将描述所有的动作。 跟着..

    首先,我们有配置我们的数据库的文件。 我们在配置中使用EntityTypeConfiguration

    EntityTypeConfiguration 是 Fl​​uent API 中的一个重要类。 EntityTypeConfiguration 为您提供了配置实体及其属性以覆盖各种 Code-First 约定的重要方法。

    我们的类与配置:

    public class RolesConfiguration : EntityTypeConfiguration<IdentityRole>
    {
        public string TableName
        {
            get { return "Roles"; }
        }
        public RolesConfiguration()
        {
            this.ToTable(TableName);
            this.HasKey<string>(r => r.Id); // It's row decision
        }
    }
    
    public class UserClaimsConfiguration : EntityTypeConfiguration<IdentityUserClaim>
    {
        public string TableName
        {
            get { return "UserClaims"; }
        }
        public UserClaimsConfiguration()
        {
            this.ToTable(TableName);
        }
    }
    
    public class UserConfiguration : EntityTypeConfiguration<User>
    {
        public string TableName
        {
            get { return "Users"; }
        }
        public UserConfiguration()
        {
            this.ToTable(TableName);
        }
    }
     public class UserLoginsConfiguration : EntityTypeConfiguration<IdentityUserLogin>
    {
        public string TableName
        {
            get { return "UserLogins"; }
        }
    
        public UserLoginsConfiguration()
        {
            this.ToTable(TableName);
            HasKey<string>(l => l.UserId); // It's row was my decision
        }
    }
    
    
    public class UserRoleConfiguration : EntityTypeConfiguration<IdentityUserRole>
    {
        public string TableName
        {
            get { return "UserRoles"; }
        }
    
        public UserRoleConfiguration()
        {
            this.ToTable(TableName);
            HasKey(r => new { r.RoleId, r.UserId }); // It's row was my decision
        }
    }
    

    我们还必须向 DB 添加配置:

            modelBuilder.Configurations.Add(new UserConfiguration());
            modelBuilder.Configurations.Add(new RolesConfiguration());
            modelBuilder.Configurations.Add(new UserClaimsConfiguration());
            modelBuilder.Configurations.Add(new UserLoginsConfiguration());
            modelBuilder.Configurations.Add(new UserRoleConfiguration());
            #endregion
    
            base.OnModelCreating(modelBuilder);
    

    之前

    之后,我将配置添加到我的数据库中

    【讨论】:

      【解决方案2】:

      降低基线 base.OnModelCreating(modelBuilder);下

             protected override void OnModelCreating(DbModelBuilder modelBuilder)
      {
      
      
          modelBuilder.Configurations.Add(new UserConfiguration());
          modelBuilder.Configurations.Add(new RolesConfiguration());
          modelBuilder.Configurations.Add(new UserClaimsConfiguration());
          modelBuilder.Configurations.Add(new UserLoginsConfiguration());
          modelBuilder.Configurations.Add(new UserRoleConfiguration());
      
              base.OnModelCreating(modelBuilder);
      
      }
      

      【讨论】:

      • Brian Driscoll,在关于 EntityFramework 的书中写的不同。你可以在这里看到books.google.com.ua/…
      猜你喜欢
      • 2019-09-19
      • 2017-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多