簡體   English   中英

對象到對象映射實用程序

[英]Object to Object Mapping Utility

我喜歡干凈地將公共和域對象 (因此,nHibernate在這里沒有幫助)彼此分開,這最終迫使我編寫大量代碼來將一個對象映射到另一個對象。 什么工具/插件可以讓人們在.NET中手動執行這種映射?m每當我谷歌這個時候,它認為我想做ORM,這不是我想要的。 謝謝!

編輯19:33CST:好的,我寫了一個非常基本的應用程序(非常快速編寫代碼),演示了我正在尋找的東西。 我只是想知道是否有一個VS插件可以為我做這個。

VS2008解決方案

您可能想嘗試一下AutoMapper 這聽起來像你在尋找。

所以,似乎對運行時解決方案不滿意,我編寫了一個小實用程序,它將在代碼中創建映射。 你可以下載下面的源代碼並寫出更好的錯誤處理等等。我很感激你做的任何很酷的修改,這是在匆忙,但有效。 請尊重該代碼是根據LGPL發布的。

對象到對象映射實用程序源代碼

更新2009年6月23日 :我對清理它的代碼進行了一些更新(一點點),並且還添加了將映射保存到文件的功能,以便以后可以修改它。

使用ValueInjecter ,你可以將任何東西映射到任何東西,例如

  • 對象< - >對象
  • object < - > Form / WebForm
  • DataReader - >對象

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

還有一個名為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

嗯,我以前在哪里見過它? ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM