繁体   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