[英]When using Entity Framework Code First, is it acceptable to add properties to a class that are not mapped to a database table at all?
[英]Entity Framework - Code First - Map results to Not Mapped properties
我已經使用Code First在EF中創建了這些實體Product
, Order
, OrderedItem
。
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.