0

我正在考虑将 PostSharp 用于实体到 DTO 和 DTO 到实体的映射器。为大约 100 个实体手动执行该任务将是维护的噩梦。我已经在 codeplex 上查看了 AutoMapper,但我认为开销可能是我的情况下的一个严重问题,此外我觉得 PostSharp 可以让我对映射约定进行一些额外的控制。如果有人可以分享这个问题之王的经验,那就太好了。

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

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

EntityType EntityToDTO(DTOType DTO) {}

DTOType DTOToEntity(EntityType Entity) {}

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

4

2 回答 2

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);

基本上,duck 类型库将通过匹配名称来映射字段。他们使用动态生成的 IL 来归档它。

如果这有可能太慢,我可能会尝试让 CodeSmith 为我生成方法。

于 2009-05-29T20:00:22.720 回答
1

如果有帮助,有一个名为 PostSharp4ET 的项目,它基本上实现了对实体框架 1 的 POCO 对象的支持。请参阅http://www.codeplex.com/efcontrib

请注意,PostSharp 不擅长生成新代码。它擅长将新代码与现有代码混合。如果您需要生成代码,我建议您编写一个基于反射的 C# 代码生成器,并编译生成的代码。或者使用像 CodeSmith 这样的工具,如前所述。

于 2009-05-29T20:09:48.660 回答