当前项目:
说实话,我以前从未使用过映射器,而ExpressMapper tutorial在高空亮点上反弹时,会对我没有的知识做出几个假设。
所以没有一般顺序:
该产品应该将其所有代码集中在一个位置。这个地方在哪里?我把它放在哪里?这些例子以
开头public void MappingRegistration() {
Mapper.Register<Product,ProductViewModel>();
}
但我不知道在哪里放这个。它是进入自己的文件还是在另一个文件中,例如在App_Start中?
如果它在项目的其他地方,我是否在自己的命名空间下创建它?
如果我的viewModel以与填充dataModel不同的方式填充,我该如何单独处理每种类型?同样,数据从数据库中拉出,并使用完全不同的条件规则填充viewModel,而不是从viewModel中提取数据并将其插入或更新回数据库。
如何引入影响数据和数据插入数据库的外部条件,例如用户角色,UserId和UserName以及各种项目设置?根据条件,某些条目可能最终为空值而不是实际值。如何使用这些条件进行业务逻辑验证(用户实际上是通过将其会话UserId与存储在DB中的UserId进行比较来更新自己的记录?)
现在我在模型中进行了大量的手动映射,但这是有问题的,特别是因为我使用的方法(减少控制器中的代码)意味着在更新期间我无法检查数据库中的条目在DB中更新之前。
答案 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。
如果还有其他需要帮助的具体内容,请发表评论。