所以我首先尝试使用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;)等
任何帮助都会很棒!
答案 0 :(得分:1)
我遇到了同样的问题。事实证明,您必须为层次结构中的所有类提供流畅的API表映射。因为您没有ApplicationUser和IdentityUser的映射,所以EF认为您打算使用Type Per Concrete策略。如果您不想为IdentityUser定义表以及为ApplicationUser定义表映射,我建议让ApplicationUser封装IdentityUser。
快速测试是将ApplicationUser的映射添加到AspNetUsers并从IdentityUser中删除继承,看看是否有帮助。
我希望有所帮助。
谢谢, Abe Billah。