2016-04-26 26 views
1
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 { } 
} 

數據庫:實體框架代碼優先:通過ID和類型的多個實體映射

訂單:

OrderId 
BillToAddressId 
ShipToAddressId 

地址:

Id 
Name 
City 
AddressType 

如何映射像這些

由字段OrderBillTo選擇從地址表的地址:的ParentId = {的OrderId},地址類型= 'OrderBillTo'

由字段OrderShipTo選擇從地址表的地址:的ParentId = {的OrderId},地址類型= 'OrderShipTo'

ShipmentShipTo通過字段選擇Address Address Address Address:ParentId = {AddressId},AddressType ='ShipmentShipTo'

Thanks!

回答

1

這不是EF設計用來處理的用例。它假定您有表和類之間的一對一映射。

這就是說,你真的需要Address的所有子類嗎?

+0

附:如果你願意,我可以告訴你如何在鏈中代替EF。 –

+0

搜索後,我認爲這可能不是一個很好的方法來做到這一點。謝謝! – Yinsen

1

用流利的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); 
相關問題