簡體   English   中英

實體框架-代碼優先-將結果映射到未映射的屬性

[英]Entity Framework - Code First - Map results to Not Mapped properties

我已經使用Code First在EF中創建了這些實體ProductOrderOrderedItem

public class Product 
{
    public int Id { get; set; }
    public string Name { get; set; }

    [NotMapped]
    public int IssuedQuantity { get; set; }

    [NotMapped]
    public int InhandQuantity { get; set; }

    public virtual ICollection<OrderedItem> OrderedItems { get; set; }
    ...
}

public class Order
{
    public int Id { get; set; }
    public string ReferenceNumber { get; set; }

    public virtual ICollection<OrderedItem> OrderedItems { get; set; }
    ...
}

public class OrderedItem
{
    public int OrderId { get; set; }
    public string ProductId { get; set; }

    [ForeignKey("OrderId")]
    public virtual Order Order { get; set; }

    [ForeignKey("ProductId")]
    public virtual Product Product { get; set; }
    ...
}

現在,我想通過將當前user id傳遞給存儲過程來獲得所有產品。 然后它將返回所有產品以及用戶手中當前的總產品數量。

問題在於,EF沒有將SP結果映射回NotMapped屬性的Product實體。 即產品實體中的所有屬性都有值,但是即使我從SP返回它們的值, NotMapped屬性也設置為NULL

我想問的是,EF是否支持這種功能? 如果是,那怎么辦?

注意我知道Computed Properties但是那樣會在表中創建不必要的列,我也不希望這樣,因為這些屬性是在運行時計算的。

注意我知道我不需要創建OrderedItem實體。 但是我在其中存儲了其他一些屬性,為簡潔起見,此處將其刪除。

我非常確定EF不支持動態映射(您可以嘗試更改映射元數據,但這不是一種干凈的方法,也可以刪除映射緩存,但是EF會非常慢)。 在這種情況下,很可笑的是該實體是2個不同的實體,因為它們具有不同的數據。 在您的情況下,最好的辦法是做兩個從Product繼承的ProductWithQuantities實體。

BTW考慮到ERP,訂單/倉庫的模型通常是不同的。 產品不包含有關QtyOnHand的信息或銷售/購買信息。 通常是另一個包含此信息的對象(庫存?)。

我將創建具有所有必需屬性的產品的視圖模型,並將其傳遞給視圖,而不是產品模型。 這樣,您就不受產品模型的映射的約束,並且不必在字段上使用[NotMapped]屬性。

    [NotMapped]
    public class ProductVM 
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public int IssuedQuantity { get; set; }

        public int InhandQuantity { get; set; }

        public virtual ICollection<OrderedItem> OrderedItems { get; set; }
        ...
    }

希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM