对象到对象映射实用程序

时间:2009-05-15 20:11:19

标签: c# .net visual-studio oop

我喜欢干净地将公共和域对象(因此,nHibernate在这里没有帮助)彼此隔离,最终迫使我编写大量代码来将一个对象映射到另一个。什么工具/插件可以让人们在.NET中手动执行这种映射?m每当我谷歌这个,它认为我想做ORM,这是什么我在找。谢谢!

编辑19:33CST:好的,我写了一个非常基本的应用程序(非常快速编写的代码)来演示我正在寻找的东西。我只是想知道是否有一个VS插件会为我做这个。

VS2008 Solution

4 个答案:

答案 0 :(得分:14)

您可能想尝试AutoMapper。这听起来像你正在寻找的。

答案 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,您可以将任何内容映射到任何内容,例如

  • object&lt; - &gt;对象
  • object&lt; - &gt;形式/ web窗体
  • DataReader - &gt;对象

它具有很酷的功能,如:扁平化和不平整