2010-11-23 9 views
1

dbmlから生成されたDataContextクラスがあります。データベースからデータを取得したら、それらをDataContractクラスに変換して、オブジェクトをWCF経由で送信できるようにする必要があります。これを行うにはLinqからSql 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が使用されています。

これは、Nameの部分文字列をFirstNameに割り当てることによって、DataContextクラスに変換を適用する必要があることを前提としています。

+0

はい、名前の部分文字列を使って名前をFirstnameに変換する必要があります(例として)。私はAutoMapperが確実に役立つことがわかります。しかし、マッピングを定義して単にそれを呼び出すXMLファイルを使用できるかどうか疑問に思っていました。それは可能ですか? – DeeStackOverflow

+0

@DeeStackOverflowはAutomapperではなく、そうではありません。そのスレッドの別のユーザーは、[otis-lib](http:/ /)を提案しています。 /otis-lib.googlecode.com/svn/)を使用することもできますが、私はそれを試したことはありません。 –

+0

ええと...あなたは、xmlを使用することがコミュニティから十分にアドバイスされていないことを示しているようです。先端に感謝します。 – DeeStackOverflow

2

dbmlファイルを開き、デザイナを選択し、プロパティウィンドウでシリアル化モードを単方向に設定します。これは、datacontextから返されたEmployeeレコードをWCF経由で送信するのに必要なすべてのものです。

私はあなたが探しているものを願っています。

+0

いいえ。 datacontractクラスはdatacontextクラスとは異なるかもしれません - プロパティは変換、フラットアウトなどが可能です。私はコードではなくxmlファイルを使ってこのtransformatonを実行したいと思います - 自分で作成するのではなく、パーティコード。 – DeeStackOverflow

0

dbmlデザイナでは、シリアル化モードを単方向に設定します。ジョブが完了しました。

わずかに異なるDTOレイヤーが必要な場合は、AutoMapperが良い選択肢かもしれません。

+0

私はいくつかのプロパティの変換を適用する必要があります。おそらくデータを平坦化する新しいDataContractクラスでなければなりません。 – DeeStackOverflow

関連する問題