簡體   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