2009-08-25 8 views
2

にデータベースフィールドをマッピングするための最良の方法、.NET 2.0、C#C#のado.net:VS2005を使用してプロパティ

こんにちはすべて、

C#のオブジェクトのプロパティにストアドプロシージャの列をマップするための最良の方法は何ですかタイトなカップリングを作り出します。例えば

、私は、ストアドプロシージャ内の列が、バイナリコードが破損しますcolxyzに変更されますと、したがって、次の

DataRow row = Getmyrows(); 
MyObject.MyProperty1 = row["col1"]; 
MyObject.MyProperty2 = row["col2"]; 

をしたいいけません。これに対処するベストプラクティスは何ですか。コードサンプルが参考になるでしょうし、事前に感謝します。

答えて

1

私はORマッパーを調べます。 LINQ to SQL、nHibernate、Entity Framework、LLBLGenなどがあります。これにより、XMLなどの外部設定ソースを使用してマッピングを設定できます。それらのほとんどは、エンティティをPOCO(Plain Old CLR Objects)にするために、エンティティを永続フレームワークから完全に切り離す方法も提供します。 ORマッパーのもう1つの利点は、SQLを生成することです。ストアドプロシージャー層を大幅に削減することができます。これは、問題の原因となるカップリングでもあります。 DBスキーマ)

0

ベストソリューションは、Hibernateのような適切なO/RMを使用するか、LinqからSQLまたはEntity Frameworkへの「より少ない」Linqを解決できるかどうかです。

しかし、必要ならば、IDataReader/SqlDataReaderを使用することをお勧めします(シンプルで最高のパフォーマンス)が、「難しい方法」を実行する場合は、列名にマップする必要がありません。

+1

実際には、nHibernateよりもかなり優れたEF v4.0を検討します。 EF v1.0は一般的に総損失ですが、VS2010と.NET 4.0のリリースにより、Entity Frameworkは確固たる候補です。 – jrista

1

カップルが近づい:

  1. あなたはstrongly typed datasetを使用し、適切なADO.NET/wを固執するを強制している場合。オブジェクトとデータ構造の間のマッピングはすべて、それが属するスキーマ内にあります。私は誰もが私が行く;-)に行っていた同じことを言った気づい

    MyObject.MyProperty1 = dataSet.TableName.PropertyName

  2. :次に、あなたは、このようなコードのw /あなたのオブジェクトを水和することができるだろうORM付き。私は時期尚早な最適化が滑りやすい斜面であることを知っていますが、あなたは必然的にそのルートに行くという明確な正当性を見つけるでしょう。要件が複雑になるにつれて後悔することはありません.Net Spaceで大きな勢いを得ている貴重なスキルセットを学ぶことになります。

-2

このようにする必要があり、ORMを使用したくない場合は、列名マッピングをxmlファイルに格納します。

<appSettings> 
    <key="prop1" value="col1"> 
</appSettings> 

、コードにような何か:私はその不格好を知っ

myObject.Prop1 = ConfigurationManager.AppSettings["prop1"].Value 

を、各プロパティのためのXML(または設定ファイル)からの読み取りを伴うが、それは動作します。

+0

残念ながら、彼はまだ管理するXMLファイルの追加されたオーバーヘッドと彼のコードのハードコーディングされた文字列の問題がありますか? –

+0

@joshua:彼の関心事は「ストアドプロシージャの列がcolxyzに変更されたときにバイナリコードが破損する」というものでした... このソリューションでは、列名が含まれていないのでバイナリは破られませんコンパイル中にXMLをバイナリに含めない限り、バイナリです。だから私の解決策は彼の懸念に取り組んでいますそして私の答えは、それはclunkyだと言う。それは私の最後の選択肢でしょう。しかし、それは非エレガントな方法ではあるが、彼の懸念に対処している。 – desigeek

0

同僚と私が2.0日後に使ったアプローチは、データテーブルからフィールド名を指定するために使用したカスタム属性を作成し、そのオブジェクトのプロパティにタグを付けたものでした。データウェアハウスをパラメータ(EntityBuilder(IDataReader rdr))として使用するジェネリックエンティティビルダを構築しました。それは、空のTを作成し、クラスを反映し、カスタム属性情報と型を取得するためにプロパティを調べ、それに基づいて値を設定します。

には、挿入および更新SPROCでパラメータを自動的に設定するために使用されるパラメータも指定された別のカスタム属性がありました。

関連する問題