[英]Entity Framework Code First: Multiple entity mapping by id and Type
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
如何像这样映射
OrderBill要通过以下字段从地址表中选择地址:ParentId = {OrderId},AddressType ='OrderBillTo'
OrderShip要通过以下字段从地址表中选择地址:ParentId = {OrderId},AddressType ='OrderShipTo'
ShipmentShip要通过以下字段从地址表中选择地址:ParentId = {AddressId},AddressType ='ShipmentShipTo'
谢谢!
这不是EF旨在处理的用例。 它假定您在表和类之间具有一对一的映射。
也就是说,您真的需要所有Address的所有这些子类吗?
使用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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.