我正在考虑将PostSharp用于实体到DTO和DTO到实体的映射器。为大约100个实体手动完成这项任务将是一场经常性的噩梦。我在codeplex上看过AutoMapper,但我认为在我的情况下开销可能是一个严重的问题,除了我觉得PostSharp可以给我一些额外的控制映射约定。如果有人可以与这个问题之王分享任何经验,那就太棒了。
我认为的方向是这样的(如果不可能,请有人告诉我):
我计划坚持上课的方面将用下面的内容填充接下来的两个方法:
EntityType EntityToDTO(DTOType DTO) {}
DTOType DTOToEntity(EntityType Entity) {}
第一种方法将基于DTO返回实体,第二种方法将执行相反的操作。在我想要遍历每个属性的方面内部,创建新目标并将属性的值作为目标对象的对应物。这是否可以在编译时完成任何运行时开销?
答案 0 :(得分:1)
如果您的DTO字段名称与您的实体字段名称匹配,那么我将使用Duck Typing
http://www.deftflux.net/blog/page/Duck-Typing-Project.aspx
http://haacked.com/archive/2007/08/19/why-duck-typing-matters-to-c-developers.aspx
您的代码可以像这样工作
UserDTO user = DuckTyping.Cast<UserDTO>(userEntity);
基本上,鸭子类型库将通过匹配名称来映射字段。他们使用动态生成的IL来存档它。
如果这有可能太慢,我可能会尝试让CodeSmith为我生成方法。
答案 1 :(得分:1)
如果有帮助,有一个名为PostSharp4ET的项目基本上实现了对实体框架1的POCO对象的支持。请参阅http://www.codeplex.com/efcontrib。
请注意,PostSharp并不擅长生成新代码。它善于将新代码与现有代码混合。如果您需要生成代码,我建议您根据反射编写C#代码生成器,并编译生成的代码。或者像前面提到的那样使用像CodeSmith这样的工具。