我喜欢干净地将公共和域对象(因此,nHibernate在这里没有帮助)彼此隔离,最终迫使我编写大量代码来将一个对象映射到另一个。什么工具/插件可以让人们在.NET中手动执行这种映射?m每当我谷歌这个,它认为我想做ORM,这是不什么我在找。谢谢!
编辑19:33CST:好的,我写了一个非常基本的应用程序(非常快速编写的代码)来演示我正在寻找的东西。我只是想知道是否有一个VS插件会为我做这个。
答案 0 :(得分:14)
您可能想尝试AutoMapper。这听起来像你正在寻找的。 p>
答案 1 :(得分:6)
所以,似乎对运行时解决方案不满意,我编写了一个小实用程序,它将在代码中创建映射。你可以下载下面的源代码并写出更好的错误处理等等。我很感激你做的任何很酷的修改,这是在匆忙,但有效。请尊重代码是在LGPL下发布的。
Object To Object Mapping Utility Source Code
更新2009年6月23日:我对清理它的代码做了一些更新(一点点),并且还添加了将映射保存到文件的功能,以便以后可以修改它
答案 2 :(得分:3)
还有一个名为Otis的有趣项目。下面是从文档页面获取的示例* .otis.xml映射:
<?xml version="1.0" encoding="utf-8" ?>
<otis-mapping xmlns="urn:otis-mapping-1.0">
<class name="Otis.Tests.UserDTO, Otis.Tests" source="Otis.Tests.Entity.User, Otis.Tests" >
<member name="Id" />
<member name="Age" />
<member name="UserName" expression="$UserName.ToUpper()" nullValue="[unknown]" />
<member name="FullName" expression="[$FirstName + ' ' + $LastName]" />
<member name="ProjectCount" expression="$Projects.Count" />
<member name="Title" expression="$Gender" >
<map from="Gender.Male" to="Mr." /> <!-- projections -->
<map from="Gender.Female" to="Mrs." />
</member>
<member name="Birthday" expression="$BirthDate" format="Born on {0:D}"/>
<member name="ProjectCount" expression="$Projects.Count" />
<member name="AvgTaskDuration" expression="avg:$Projects/Tasks/Duration" />
<member name="MaxTaskDuration" expression="max:$Projects/Tasks/Duration" />
</class>
从程序集中读取映射文件:
// configure the new Configuration object using metadata of types in the current assembly
Configuration cfg = new Configuration(); // instantiate a new Configuration, one per application is needed
cfg.AddAssembly(Assembly.GetExecutingAssembly()); // initialize it
嗯,我以前在哪里见过它? ;)
答案 3 :(得分:3)
使用ValueInjecter,您可以将任何内容映射到任何内容,例如
它具有很酷的功能,如:扁平化和不平整