Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我应该从ViewModel到模型对象使用AutoMapper吗_C#_Asp.net Mvc_Model_Viewmodel_Automapper - Fatal编程技术网

C# 我应该从ViewModel到模型对象使用AutoMapper吗

C# 我应该从ViewModel到模型对象使用AutoMapper吗,c#,asp.net-mvc,model,viewmodel,automapper,C#,Asp.net Mvc,Model,Viewmodel,Automapper,我想在viewmodel中执行所有输入验证 访问数据库时,必须将viewmodels数据复制到发送到数据库的模型 我担心数据可能会丢失,因为: Automapper在某些场景中设置错误,因此属性不会复制到模型中 或者Automapper不适合所有场景,可能太复杂了 我的担心是合理的,还是我不应该在意这些?在这种情况下,Automapper完全可以,我广泛使用它正是为了这个目的。如果您担心数据丢失,那么在持久化或调用其他服务之前,您不应该使用模型本身的数据注释验证来确保您拥有所需的数据 另外,

我想在viewmodel中执行所有输入验证

访问数据库时,必须将viewmodels数据复制到发送到数据库的模型

我担心数据可能会丢失,因为:

  • Automapper在某些场景中设置错误,因此属性不会复制到模型中
  • 或者Automapper不适合所有场景,可能太复杂了

我的担心是合理的,还是我不应该在意这些?

在这种情况下,Automapper完全可以,我广泛使用它正是为了这个目的。如果您担心数据丢失,那么在持久化或调用其他服务之前,您不应该使用模型本身的数据注释验证来确保您拥有所需的数据

另外,确保使用Auotomapper或手动代码映射不会遗漏任何内容的唯一真正方法是一组好的单元测试

我担心数据可能会丢失,因为:Automapper 对某些场景设置错误,因此不会复制属性 “转到模型”或“自动映射”并不适用于所有场景 可能太复杂了

我认为你不太可能泄露数据。对于复杂的 viewModels您可以选择手动设置特定的属性 未被自动映射器复制。根据@feanz良好单位的建议 测试将为您提供所需的保证**


仅在ViewModel上进行Ok验证。我已经读到Automapper调用应该在一个额外的类中完成,该类服务于关注点分离(SOC),而不是在mvc控制器中。你在哪里打这个电话?在业务层?您可以在控制器中将其转换,如果需要,可以将的viewmodel传递到服务层,或者将其打包为RequestObject并向上传递。然后在服务层使用AutoMapper。这取决于你和你的应用程序有多复杂。做让你快乐的事。您可以在没有如下视图模型的情况下使用DataAnnotation验证“…如果需要,将的viewmodel传递给服务层…”因为viewmodel使用属于MVC命名空间的属性进行注释,我认为将我的服务层与MVC耦合不是一个好主意。感谢您在System.ComponentModel.DataAnotations中提供的所有注释。只有远程验证才是MVC的一部分。这意味着传递这些模型是很好的。人们可能会争辩说,从概念的角度来看,这是无效的,一种模式是让服务层获取请求和响应对象,并首先将viewmodel映射到该对象。@Elisa:我与您意见一致。我还认为,让服务层只在模型上工作并且独立于ViewModel更好。我也在寻找一种将数据从模型传输到ViewModel的好方法,反之亦然。周围所有的人都在使用AutoMapper。。。但我想用一些我知道我在做什么的东西:|