无法将 NULL 值插入表“...AspNetUsers”的“Discriminator”列;列不允许为空。插入失败

问题描述 投票:0回答:2

实体框架 6、MVC5、ASP 身份 2.0。

我是实体框架和 ASP Identity 的新手。 我已经按照以下说明使用代码优先方法创建了数据库:http://dotnetcodr.com/2014/07/10/introduction-to-entityframework-6-part-1-the-basics-of-code-first / 并将它们相应地应用到我自己的项目中。

表格已创建,一切正常。但是,当我尝试注册新用户时,会引发异常:“Entity Framework 6,ASP Identity。无法将 NULL 值插入列“Discriminator”,表“...AspNetUsers”;列不允许为空。INSERT失败了。” 由 AccountController 中的 CreateAsync 方法触发

第 153 行:{
第 154 行:var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
第 155 行:var result = wait UserManager.CreateAsync(user, model.Password);
第 156 行:if (结果.成功)
第 157 行:{

我什至不确定应该将哪部分代码粘贴到此处。

这是我的 DbContext:

    public class BulkMailerContext : IdentityDbContext<ApplicationUser>
{
    public BulkMailerContext()
        : base("BulkMailerContext", throwIfV1Schema: false)
    {
    }
    public DbSet<Email> Emails { get; set; }
    public DbSet<SubscriptionList> SubscriptionLists { get; set; }
    public DbSet<Recipient> Recipients { get; set; }
}

这是默认的身份上下文:

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("BulkMailerContext", throwIfV1Schema: false)
    {
    }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

我还没有找到太多关于这个异常的信息。

这篇文章 http://forums.asp.net/t/1974183.aspx?不能+插入+the+value+NULL+into+column+Discriminator 表明项目有一个类,继承自 User。我没有这样的东西。

这篇文章 https://connect.microsoft.com/VisualStudio/feedback/details/800655/calling-new-user-with-4-5-1-does-not-pass-column-discriminator-required-in-aspnetusers-tables 是关于 Web API 项目,微软团队说这是一个错误,他们会修复它,据我所知

这个 无法将 NULL 值插入 AspNetUsers 表的“Discriminator”列 不提供任何解决方案

这个 Web API 2 无法注册用户 表明在 Identity 2.0 中这个问题已被修复,但我目前有 Identity 2.0

我有自动迁移 - 如果重要的话,将其关闭。但我已经使用 update-database 命令从 PM 控制台手动更新了数据库。

欢迎任何建议。

asp.net-mvc entity-framework-6 asp.net-identity-2 asp.net-mvc-5.2
2个回答
2
投票

我运行了“add-migration -ConfigurationTypeName ...ApplicationContextMigrations.Configuration”InitialCreate”-force”

然后,从数据库中删除所有 Identity 表。

然后运行“更新数据库...ApplicationContextMigrations.Configuration”

并且鉴别器列消失了。当我运行应用程序时,用户注册成功。


0
投票

我也有同样的错误。我有一个现有的 AspNetUsers 表,我用一个新列对其进行了扩展。在此过程中添加了鉴别器列。我认为它的创建是因为我从 IdentityUser 继承了我的扩展类;但是,我没有告诉上下文使用它。

IdentityDbContext<ExtendedIdentityUser>
...当我最终做到这一点时,不需要鉴别器列。我刚刚从 aspnetusers 表中删除了该列,并且能够再次成功插入。

© www.soinside.com 2019 - 2024. All rights reserved.