有人可以用Sharp Lite澄清Automapper的用法吗? (Asp.Net MV3)

时间:2012-08-09 08:31:26

标签: asp.net asp.net-mvc-3 automapper

我正在尝试创建一个简单的电子商务应用程序。产品必须具有品牌,并且至少有一个类别。我一直在使用(非常重要的)Sharp Lite示例MyStore和CaTs - 所以如果您熟悉这些,您应该希望了解这一流程。我正在尝试在ProductController中创建Create动作。

1)在ProductController中,我注入了我的产品存储库和我的产品服务。

2)在Create操作中,我调用productService.CreateProductViewModel()

3)在CreateProductViewModel中,我创建了一个新的ProductFormDto,它具有我的ViewModel所需的所有属性(名称,产品代码等) - 以及类别和品牌的IEnumebles。

    public CreateProductViewModel()
    {
        ProductFormDto = new ProductFormDto();
    }

    public ProductFormDto ProductFormDto { get; set; }
    public IEnumerable<ProductCategory> Categories { get; set; }
    public IEnumerable<Brand> Brands { get; set; }

}

我认为这将是一个非常复杂的观点。

我的问题是,使用Sharp Lite我需要使用automapper来映射我的ViewModel,如下所示:

    public void Map()
    {
        Mapper.CreateMap<Product, ProductFormDto>();
    }

我将它作为ServiceLayerMappings.cs

放在Tasks(服务)层中

如果是这样,我会在哪里放置我见过的额外映射代码,大多数示例中都放在Controller中?

我首先如何/何时/何时调用此ServiceLayerMappings?

ServiceLayerMappings是否在我的任务层根目录下的单个文件中包含了所有ViewModel的所有映射?

任何形式的指导都会非常感激,因为我现在正在摸不着头脑!

1 个答案:

答案 0 :(得分:0)

啊我觉得我有它。在MyStore示例中有CudTasks文件,以下方法是其中的一部分:

    /// <summary>
    /// Udpates an entitry from the DB with new information from the form.  This example 
    /// manually copies the data but you could use a more sophisticated mechanism, like AutoMapper
    /// </summary>
    protected override void TransferFormValuesTo(ProductCategory toUpdate, ProductCategory fromForm) {
        toUpdate.Name = fromForm.Name;
        toUpdate.Parent = fromForm.Parent;
    }