实体框架 - 使用TPT创建的Discriminator列

时间:2015-04-09 02:19:56

标签: c# entity-framework table-per-type

所以我首先尝试使用Entity Framework代码实现Table-per-Type,但是仍然在AspNetUsers表(ApplicationUser类)中创建了一个鉴别器列,即使我已经告知过它。

的DbContext

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolContext, School.Migrations.Configuration>());

        modelBuilder.Entity<Student>().ToTable("Students");
        modelBuilder.Entity<Teacher>().ToTable("Teachers");
    }  

    public virtual DbSet<Address> Addresses { get; set; }

有问题的类的POCO,包括使用ASP标识的ApplicationUser:

public class ApplicationUser : IdentityUser
{
    public virtual ICollection<Address> Addresses { get; set; }
}

public class Student: ApplicationUser
{
    public virtual string Name { get; set; }
    public virtual ICollection<Subject> Subjects{ get; set; }
}

public class Teacher: ApplicationUser
{
    public virtual int Wage{ get; set; }
}

生成的数据库架构似乎插入了一个&#39; Discriminator&#39;列,虽然当我通过网站注册一个新帐户时,列显示&#34; undefined&#34;无论如何,这个行。

我尝试过的事情: 添加到使用ToTable创建的ApplicationUser的OnModelCreating(&#34; AspNetUsers&#34;)等

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。事实证明,您必须为层次结构中的所有类提供流畅的API表映射。因为您没有ApplicationUser和IdentityUser的映射,所以EF认为您打算使用Type Per Concrete策略。如果您不想为IdentityUser定义表以及为ApplicationUser定义表映射,我建议让ApplicationUser封装IdentityUser。

快速测试是将ApplicationUser的映射添加到AspNetUsers并从IdentityUser中删除继承,看看是否有帮助。

我希望有所帮助。

谢谢, Abe Billah。