我正在使用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));
但是在基类和派生类之间进行转换存在问题。现在我被卡住了......