2012-01-25 15 views
1

2009年、私は最も古いVB6アプリケーションの大規模な書き直しを開始しました。私は、.NET 3.5にあるWCFサービスを作成して、SQL Server 2005データベースからデータを取り出し、そこに格納することから始めました。 VB6で書いた同様のCOM +コンポーネントは、ネットワーク経由でデータを配列として転送しています。 2009年に私は代わりにADO.NET DataSetsを使用すると考えました。ローカルにデータを保存するより良い方法はありますか?

3年前までの早送り。このように、私は2009年にこのプロジェクトを開始しましたが、その他の緊急プロジェクトや課題は、常にそれをバックバーナーに押し付けました。さて、私はどこで中断したのかを考えようとしています。私たちの設計は、バックエンドのSQL Serverデータベースからデータを取り出し、それをSQL Expressデータベースにローカルに格納することです。

ユーザーのマシン上のアプリケーションは、ローカルのSQL Expressデータベースに対して実行され、ユーザーが終了するとバックエンドサーバーにのみ転送されます。ユーザーは仕事場に出て、データをアップロードする前にかなり長い時間(数ヶ月)失踪する可能性があります。この中で私はエンティティフレームワークを学び、ローカルデータストアに対して使用しようとしています。

エンティティオブジェクトなどに対してLINQを使用するというアイデアは素晴らしいですが、私の古いWCFサービスによってもたらされたデータセットからのデータ転送を迅速にコーディングする方法には苦労しています。ローカルエンティティクラス。私は返されたデータセット/データテーブルから各テーブルの各列を描くことができますが、WOW、それは多くの作業です!

これを行う方法はありますか?

答えて

1

Automapperを試してみてください。 AutomapperはIDataReaderからマッピングすることができますので、あなたはこのようにいろいろ書い操作を行うことができます。

Mapper.CreateMap<IDataReader, YourEntity>(); 
Mapper.Map<IDataReader, IList<YourEntity>>(dataTable.CreateDataReader()); 

エンティティ・フィールドはDataTableの列と一致した場合、これはあなたがする必要があることすべてをする必要がありますが、Automapperは、より事前マッピング設定も認めていませんあなたがそれを必要とするならば。

+0

私はAutoMapperについて聞いたことがありません。リンクをありがとうございます。明確にするために、WFFサービスからいくつかのテーブルを取得しました。これらのテーブルは、EFエンティティにマップする必要があります。私はMapper.CreateMap <>とMapper.Map <>をそれぞれ同じルーチンで実行しますか?それとも、それが自分のルーチンであるかのどちらが良いでしょうか?私はMapperオブジェクトのスコーピング、文脈などを少しは確信しています。 – Rod

+0

@Rod、各エンティティに対して 'CreateMap'を呼び出す必要があります。エンティティマップへの 'DataTable'が1対1でない場合、いくつかの設定を行う必要があります(私は常に物事を単純にしていますので、' CreateMap'を呼び出す以外に多くのことをする必要はありませんでした。 Webサイトおよびサンプルコードを参照してください)。私はマッピングが静的であると信じているので、あなたのクライアントではすべてのマップを1か所で行うことができます。 –

+0

ありがとうございました。 – Rod

関連する問題