繁体   English   中英

实体框架代码优先:按ID和类型映射多个实体

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM