从ViewModel中的另一个表实现一个附加属性

时间:2016-08-25 07:49:11

标签: c# asp.net-mvc entity-framework automapper

public class Order() 
{
    public int ordernumId {get;set;}
    public int factoryId {get;set;}
}

public class Factory 
{
    public int factoryId {get;set;}
    public int factoryName {get;set;}
}
  1. 只进行一次数据库调用。
  2. Factoryname和Ordercode相同 网页。
  3. 想象一下,还有1500万个其他ViewModel 想要一个类似的

    Public Class Order_Details_VM 
    {
        public int ordernumId {get;set;}
        public int factoryName {get;set;}
    }
    
  4. 我的图层是这样的: 视图 - >的ViewModels => Controllers-> Repository->的EntityFramework

    存储库通常会传回IQueryable对象,但有时会传递DTO或EF模型(EF因为DTO是相同的)。

    我想在此提出一些建议,这些建议并不涉及要求automapper通过成员资格规则为1500万个视图模型执行此操作。

    哦,这都是日语,所以自动展平不起作用。 : - )

    我该怎么做?#39;正确'?

1 个答案:

答案 0 :(得分:0)

在我用更多的exprerince重读这个问题之后回答我自己的问题。

正确的方法是映射到更大的DTO对象。

例如,我的OrderDto应该包含FactoryName,这对于许多在视图中未使用FactoryName的地方来说似乎是浪费,但是它几乎没有任何开销只是默认包含它所以数据库总是加入并获取工厂名称。

因此,只要任何页面想要与订单有任何关系,它也可以选择访问FactoryName

域层

public class Order() 
{
    public int ordernumId {get;set;}
    public int factoryId {get;set;}
}

public class Factory 
{
    public int factoryId {get;set;}
    public int factoryName {get;set;}
}

应用程序/服务层

public class OrderDto() 
{
    public int ordernumId {get;set;}
    public int factoryId {get;set;}
    public int factoryName {get;set;}
}

表示层

public Class Order_Details_VM 
{
    public int ordernumId {get;set;}
    public int factoryName {get;set;}
}