实体框架TPH:如何将外键映射到DB列

时间:2016-11-01 09:45:27

标签: c# entity-framework ef-fluent-api table-per-hierarchy tph

我正在使用Table-Per-Hierarchy模式(所有派生类都使用相同的DB表),如下所示:

基类:

loc3

一些派生类,其中一些有Address,如下所示:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

不幸的是,在创建数据库时,会为每个地址外键创建一个新列,如下所示:public class Student : Person { public virtual Address Address { get; set; } } public class Teacher : Person { public virtual Address Address { get; set; } } public class Address { public int Id { get; set; } public string Street { get; set; } } Address_Id ... Address_Id1

可以通过使用Address明确地将外键添加到每个类来克服它:

Address_IdN

但是,此解决方案要求在类中具有public class XXX : Person { [Column("AddressId")] public virtual int AddressId { get; set; } [ForeignKey("AddressId")] public virtual Address Address { get; set; } } 属性,这是不合需要的。它不能被隐藏声明为私有或受保护,因为表映射属性必须是公共的。

我想过像这样使用流畅的API:

AddressId

        modelBuilder.Entity<Student>()
            .HasOptional(s => s.Address)
            .WithRequired(a => (a.Person as Student));

但是在基类和派生类之间进行转换存在问题。现在我被卡住了......

0 个答案:

没有答案