【问题标题】:How to create custom fields for IdentityUser in asp.net Core 2.1.1如何在 asp.net Core 2.1.1 中为 IdentityUser 创建自定义字段
【发布时间】:2018-08-06 02:25:05
【问题描述】:

我创建了一个扩展“IdentityUser”类的模型。

public class ApplicationUser : IdentityUser
{
    public string FirstName_TXT { get; set; }
    public string LastName_TXT { get; set; }
}

在定义 dbcontext 时,我确保包含 IdentityDbContext 以及 ApplicationUser 参考。

//initial DB Configuration
public class DbContext : IdentityDbContext<ApplicationUser>
{
    //Users References Articles
    //Articles Automaticalled gets create
    public DbSet<ContactRequest> ContactRequests { get; set; }
    public DbSet<Class> Classes { get; set; }

    public DbContext()
    {

    }

    public DbContext(DbContextOptions options)
        : base(options)
    {

    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=.\SQLEXPRESS;Database=DBNAME;Trusted_Connection=True;");
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }
}

当我尝试在控制台应用程序中创建带有附加字段的数据库时,我收到以下错误。

class Program
{
    static void Main(string[] args)
    {

        using (var ctx = new DbContext())
        {
            ctx.Database.EnsureCreatedAsync();

            ctx.SaveChanges();

        }
    }
}

System.InvalidOperationException: '无法在 'ApplicationUser' 上配置密钥,因为它是派生类型。必须在根类型“IdentityUser”上配置密钥。如果您不打算将“IdentityUser”包含在模型中,请确保它不包含在上下文的 DbSet 属性中、在对 ModelBuilder 的配置调用中引用或从包含的类型的导航属性中引用在模型中。'

不知道我错过了什么。任何建议将不胜感激。

【问题讨论】:

    标签: asp.net-core-2.1 entity-framework-core-2.1


    【解决方案1】:

    设计不能忽略 key 属性。 IdentityUser 有一个默认的密钥属性 Id。 您的 ApplicationUser 类没有指定其 Id 字段的类型。我把我的代码

    public class ApplicationUser : IdentityUser<string>
    {
        public string FirstName_TXT { get; set; }
        public string LastName_TXT { get; set; }
    }
    

    你可以使用整数类型的ID键属性,为此使用IdentityUser&lt;int&gt;

    【讨论】:

    • 当我尝试进行此更改时,在定义 DbContext “该类型不能用作泛型类型或方法 'IdentityDbContext'。没有从“ApplicationUser”到“IdentityUser”的隐式引用转换“ public class DbContext : IdentityDbContext&lt;ApplicationUser&gt; {}
    • 您需要有一个类似于 ApplicationUser 类的 ApplicationRole 类。如果使用 key int 类型,则使用:public class DbContext :IdentityDbContext
    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 2015-10-06
    • 2016-10-07
    相关资源
    最近更新 更多