[英]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.