2010-11-23 23 views
1

我有從dbml生成的DataContext類。一旦我從數據庫獲取數據,我需要將它們轉換爲DataContract類,以便可以通過WCF發送對象。要做到這一點將Linq轉換成DataContext對象到DataContract對象

一種方法是這樣的:

using (var dc = new TestDBL2SDataContext(Settings.Default.TestDBConnectionString)) 
     { 
      var myEmp = from rec in dc.Employees 
        select new MyDataContracts.Employee 
          { 
           FirstName = rec.Name.Substring(0,10) 
          }; 
      return myEmp.FirstOrDefault();; 
     } 

有沒有更好的方式通過XSD/XSLT文件,我可以在我的項目定義,只是指出這樣做呢?

回答

1

我們已經爲此編寫了Translator<FromDataModelType, ToDataContractType>類,並且使用AutoMapper作爲快速和無痛的方式來完成屬性之間的映射。

這假設您需要將轉換應用於DataContext類,就像您將Name的子字符串分配給FirstName一樣。

+0

是的,我需要通過子字符串將Name轉換爲Firstname(作爲示例)。我發現AutoMapper一定會有所幫助。但想知道是否可以使用定義映射的XML文件並簡單地調用它。那可能嗎 ? – DeeStackOverflow 2010-11-23 19:15:41

2

打開dbml文件,選擇設計器,並在屬性窗口中設置序列化模式爲單向,這就是發送通過WCF從datacontext返回的Employee記錄所需的全部內容。

我希望你在找什麼。

+0

沒有。 datacontract類可能與datacontext類不同 - 屬性可能會被轉換,展平等。我想通過xml文件來做這個轉換,而不是代碼 - 我假設它更清潔,而不是寫我自己的或者使用某些第三方派對代碼。 – DeeStackOverflow 2010-11-23 19:20:00

0

在dbml設計器中,將序列化模式設置爲單向。任務完成。

如果你需要稍微不同的DTO層,也許AutoMapper是一個不錯的選擇。

+0

我需要應用一些屬性變換。它必須是一個新的DataContract類,可能會使數據變平。 – DeeStackOverflow 2010-11-23 19:18:07