2010-02-12 52 views
1

我試圖使得具有「ID」結束源成員被映射到目標成員沒有ID設置了一個部件名稱映射約定。例如AutoMapper:設置構件名稱匹配慣例

用戶ID - >用戶

怎樣才能做到這一點?我嘗試使用SourceMemberNameTransformer而沒有成功。還嘗試使用RecognizePostfixes()。

this.SourceMemberNameTransformer = s => 
             {  
              return s.Replace("Id", string.Empty); 
             }; 
+0

這是什麼? – 2010-02-15 20:02:51

+0

這是typeof(簡介) – epitka 2010-02-15 23:49:48

+0

你是什麼意思「沒有成功?」發佈一個完整的工作示例,預期行爲和實際行爲,並且您可能會收到一個很好的答案。 – Aaronaught 2010-02-17 03:06:55

回答

0

截至目前,這似乎並沒有工作當在Profile中設置它時。 SourceMemberNameTransformerRecognizePostfix都不在Profile中工作。但是,在Automapper全局配置中指定它工作正常。

+0

4年後,它仍然無法正常工作。/cc @ jimmy-bogard – Mrchief 2014-04-02 15:52:21

0

這應該工作:

this.SourceMemberNameTransformer = s => 
      { 
       if (s.EndsWith("Id")) 
        return s.Substring(0, s.Length - 2);    
       return s; 
      }; 

您也可以嘗試實現與DestinationMemberNamingConvention和正則表達式。

+0

的2.1.1版本已經被移除之後在這同我有什麼? – epitka 2010-02-15 23:52:01

+0

是的。但是您冒着任何包含'id'的字符串的風險,比如Bid。 ans EndsWith默認情況下是祕密的,所以它更安全。 – 2010-02-17 02:49:26

+1

String.Replace也區分大小寫 - *此方法執行序號(區分大小寫且不區分大小寫)搜索以查找oldValue *。 http://msdn.microsoft.com/en-us/library/fk49wtc1.aspx – statenjason 2010-02-22 14:35:25

1

您也可以使用「RecognizePostfixes」的方法:

this.RecognizePostfixes("Id"); 

內置的變壓器是這樣的,只是以供將來參考:

s => Regex.Replace(s, "(?:^Get)?(.*)", "$1"); 
+0

這並不一個['Profile']內工作(https://github.com/AutoMapper/AutoMapper/wiki/Configuration)。 – Mrchief 2014-04-02 15:53:29

+0

然後你可以打開一個GitHub問題嗎? – 2014-04-03 13:20:19

+0

https://github.com/AutoMapper/AutoMapper/issues/490 – Mrchief 2014-04-03 15:23:21