ExpressMapper教程假设 - 我不知道从哪里开始

时间:2016-07-21 20:15:18

标签: asp.net asp.net-mvc entity-framework asp.net-mvc-5 express-mapper

当前项目:

  • ASP.NET 4.5.2
  • MVC 5
  • EF 6

说实话,我以前从未使用过映射器,而ExpressMapper tutorial在高空亮点上反弹时,会对我没有的知识做出几个假设。

所以没有一般​​顺序:

该产品应该将其所有代码集中在一个位置。这个地方在哪里?我把它放在哪里?这些例子以

开头
public void MappingRegistration() {
    Mapper.Register<Product,ProductViewModel>();
}

但我不知道在哪里放这个。它是进入自己的文件还是在另一个文件中,例如在App_Start中?

如果它在项目的其他地方,我是否在自己的命名空间下创建它?

如果我的viewModel以与填充dataModel不同的方式填充,我该如何单独处理每种类型?同样,数据从数据库中拉出,并使用完全不同的条件规则填充viewModel,而不是从viewModel中提取数据并将其插入或更新回数据库。

如何引入影响数据和数据插入数据库的外部条件,例如用户角色,UserId和UserName以及各种项目设置?根据条件,某些条目可能最终为空值而不是实际值。如何使用这些条件进行业务逻辑验证(用户实际上是通过将其会话UserId与存储在DB中的UserId进行比较来更新自己的记录?)

现在我在模型中进行了大量的手动映射,但这是有问题的,特别是因为我使用的方法(减少控制器中的代码)意味着在更新期间我无法检查数据库中的条目在DB中更新之前。

1 个答案:

答案 0 :(得分:2)

您可以将其粘贴到您想要的任何地方 - 唯一需要的是在调用Mapper.Map<Product,ProductViewModel>之前在代码中调用它。

E.g。

public static void main()
{
    Mapper.Register<Product,ProductViewModel>();
}

在功能上与

相同
public static void main()
{
    RegisterMapping();
}

public static void RegisterMapping()
{
    Mapper.Register<Product,ProductViewModel>();
}

如果要将一个类成员映射到另一个具有不同名称的类成员,可以使用Member映射指定它。

Mapper.Register<Product, ProductViewModel>()
    .Member(dest => dest.efgh, src => src.abcd);

如果您要应用特殊转换规则,可以使用Function映射指定 - 例如您希望ProductViewModel中的价格是产品价格的2倍:

Mapper.Register<Product, ProductViewModel>()
    .Function(dest => dest.Price, src => src.Price*2);

您对映射所做的任何自定义都应该在您注册映射时完成,并且必须在逐个成员的基础上完成AFAIK。

如果还有其他需要帮助的具体内容,请发表评论。