实体框架代码优先 - 列名无效 'Discriminator1'



我们正试图将一个简单的成员身份应用程序迁移到Identity 2.0,但我们遇到了以下错误。

Invalid column name 'Discriminator1'.
Invalid column name 'Discriminator1'.
Invalid column name 'Discriminator1'.

我找不到问题出在哪里,因为我已经正确地执行了所有的迁移步骤。

有人能帮忙找出问题可能在哪里以及如何解决吗
欢迎提出任何建议。

我们有以下与ASP.NET登录相关的代码。

     [Table("AspNetUserLogins")]
     public partial class AspNetUserLogins : IdentityUserLogin<Guid>
     {
     }

    [Table("AspNetUserClaims")]
    public partial class AspNetUserClaims : IdentityUserClaim<Guid>
    {
    }

    [Table("t_User")]
    public partial class User : IdentityUser<Guid, AspNetUserLogins, AspNetUserInRoles, AspNetUserClaims>
    {   
        [Key]
        [Column("UserId")]
        [DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
        public override Guid Id { get; set; }
        [Column("Username")]
        public override string UserName { get; set; }
        [NotMapped]
        public Guid UserId { get { return base.Id; } }
        public Guid ApplicationId { get; set; }
        public DateTime? CreationDate { get; set; }
        public string Discriminator { get; set; }
        public int? FailedPasswordAnswerAttemptCount { get; set; }
        public DateTime? FailedPasswordAnswerAttemptWindowStart { get; set; }
        ...

错误Invalid column name 'Discriminator1'.主要与继承有关。默认情况下,当一个类继承一个模型(即与表相关联的实体/POCO)时,代码首先假设继承类映射到数据库中的表。但如果不是这样,那么在继承类名的正上方使用[NotMapped]属性,如下所示:

[NotMapped]
public class ContactUsViewModel : Content
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    ...
}

或者使用Fluent API配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // Ignore 'ContactUsViewModel' class as it is not mapped to database
    modelBuilder.Ignore<ContactUsViewModel >();
    ...
}

参见类似的问题EF Code First";无效的列名';鉴别器'"但没有继承

如果您的模型中有Enum,并且当更新时,下面这样的现有函数可以修复

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<MyModel>()
    ....
    .Map<AnnouncementEvent>(m => 
    m.Requires("Discriminator").HasValue(MyTypeEnum.Event.ToString()))
    ....
}

相关内容

  • 没有找到相关文章

最新更新