namespace Sample.Orders
{
public class Order : FullAuditedEntity<string>
{
[Column("OrderId")]
public override string Id { get; set; }
public long BillToAddressId { get; set; }
public virtual Address.BillToAddress BillTo { get; set; }
public string ShipToAddressId { get; set; }
public virtual Address.ShipToAddress ShipTo { get; set; }
}
}
namespace Sample.Shipments
{
public class Shipmen : FullAuditedEntity<string>
{
[Column("ShipmentId")]
public override string Id { get; set; }
public long AddressId { get; set; }
public virtual Address.ShipmentShipTo ShipTo { get; set; }
}
}
namespace Sample.Address
{
public abstract class Address : FullAuditedEntity<string>
{
public override string Id { get; set; }
public double Name { get; set; }
public string City { get; set; }
public string ParentId { get; set; }
public string AddressType { get; set; }
}
public class OrderBillTo : Address { }
public class OrderShipTo : Address { }
public class ShipmentShipTo : Address { }
}
数据库:
订单:
OrderId
BillToAddressId
ShipToAddressId
地址:
Id
Name
City
AddressType
如何映射这些
OrderBillTo按地址从地址表中选择地址:ParentId = {OrderId},AddressType ='OrderBillTo'
OrderShipTo按地址从地址表中选择地址:ParentId = {OrderId},AddressType ='OrderShipTo'
ShipmentShip从地址表中按字段选择地址:ParentId = {AddressId},AddressType ='ShipmentShipTo'
谢谢!
答案 0 :(得分:1)
这不是EF旨在处理的用例。它假定您在表和类之间具有一对一映射。
那就是说,你真的需要所有那些Address的子类吗?
答案 1 :(得分:1)
使用Fluent API:
modelBuilder
.Entity<Order>
.HasOptional(order => order.BillTo)
.WithRequired(address => address.ParentId)
.HasForeignKey(order.BillToAddressId);
modelBuilder
.Entity<Order>
.HasOptional(order => order.ShipTo)
.WithRequired(address => address.ParentId)
.HasForeignKey(order.ShipToAddressId);
modelBuilder
.Entity<Shipment>
.HasOptional(order => order.ShipmentShipTo)
.WithRequired(address => address.ParentId)
.HasForeignKey(order.AddressId);