实体框架Code First - 无效的列名'Discriminator1'

3
我们正在尝试将一个简单的会员应用迁移到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; }
        ...
2个回答

3

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

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

    public string LastName { get; set; }
    ...
}

或者使用流式API进行配置:

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

请参考类似问题EF Code First“Invalid column name 'Discriminator'”但没有继承


0

如果您的模型中有枚举类型,那么更新现有函数如下所示即可解决问题

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{

    modelBuilder.Entity<MyModel>()
    ....
    .Map<AnnouncementEvent>(m => 
    m.Requires("Discriminator").HasValue(MyTypeEnum.Event.ToString()))
    ....
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接