PostSharp用于对象映射器

时间:2009-05-29 19:41:59

标签: c# aop postsharp

我正在考虑将PostSharp用于实体到DTO和DTO到实体的映射器。为大约100个实体手动完成这项任务将是一场经常性的噩梦。我在codeplex上看过AutoMapper,但我认为在我的情况下开销可能是一个严重的问题,除了我觉得PostSharp可以给我一些额外的控制映射约定。如果有人可以与这个问题之王分享任何经验,那就太棒了。

我认为的方向是这样的(如果不可能,请有人告诉我):

我计划坚持上课的方面将用下面的内容填充接下来的两个方法:

EntityType EntityToDTO(DTOType DTO) {}

DTOType DTOToEntity(EntityType Entity) {}

第一种方法将基于DTO返回实体,第二种方法将执行相反的操作。在我想要遍历每个属性的方面内部,创建新目标并将属性的值作为目标对象的对应物。这是否可以在编译时完成任何运行时开销?

2 个答案:

答案 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这样的工具。