2016-04-26 21 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); 
相关问题