![](/img/trans.png)
[英]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.