2011-10-24 9 views
4

私は「場所」クラスを持っています。このクラスは基本的にアドレスを保持するため、 "location"という用語が使用されます。私は "場所"になりたい複数のレコードを返すデータテーブルを持っています。クラスとしてのDataTableの各行?

今、私はIDで1つの「場所」を取得する「場所」クラスに「ロード」メソッドを持っています。しかし、複数のデータテーブル行から「ロケーション」オブジェクトのコレクションを取得するにはどうすればよいですか?各行は「場所」になります。

私は明らかな理由から、各レコードのデータベースに行きたくありません。 「ロード」メソッドをバイパスしてデータテーブルの行をループしながら、位置クラスの新しいインスタンスを作成し、プロパティに値を割り当てるだけですか?それは私には論理的ですが、これが正しいか最も効率的な方法であるかどうかはわかりません。

答えて

1

あなたは正しい軌道に乗っている、あなたが必要とするすべての場所を取得データベースへの1回のトリップでパフォーマンスが最適になります。

コードをよりきれいにする/短縮するには、DataRowになるようにLocationクラスのコンストラクタを作成します。これにより、プロパティが適切に設定されます。これにより、コードベース内の1か所で、列からプロパティへのマッピングを集中管理し、メンテナンスが容易になります。

次に、データテーブルの行をループして、コンストラクタを呼び出すことはまったく可能です。

Entity Frameworkのようにobject to relational mapperを使用して、データベースのやりとりを行うこともできます。

+0

甘い。それは最高です。なぜ私はそれを考えなかったのか分からない。 –

2

これは、データの行(または行の集合)がどのようにC#bizオブジェクトにマッピングされるかについて(あなたの説明)です。しかし、自分であなたがORMを既存の番号のいずれかを考慮しなければならない多くの作業を保存するためのフレームワークのようなNHibernateEntity FrameworkCastle ActiveRecordなど

実際にすべての定型的なコードを生成します

ほとんどオームズ行とフィールド(オブジェクトリレーショナルマッパー) .NETオブジェクトのプロパティにマップされ、その逆もあります。 (ORMを使用すると、dbデータを検索およびマッピングするのと同じくらい簡単に追加、更新、削除できます)。ORMを一見してください。少量の学習(それぞれにいくつかの学習曲線があります)はすぐに成果を上げます。 ORMもまた、RDBMSに触れるアプリケーションではかなり標準的になり、実際に期待されています。

また、これらのリンクは、関心(ORM関連)のものであってもよい:

Wikipedia article on ORMs

SO Discussion on different ORMs

Many different .NET ORMs listed

1

IEnumerableを返すメソッドを作成します。この方法ではデータベースの作業を行い、sqldatareaderを場所コンストラクタに渡します。だから私は、明らかにそのコードが動作しません。この

public static IEnumerable<location> GetLocations() 
{ 
    List<location> retval = new List<location>(); 
    using(sqlconnection conn = new sqlconn(connection string here); 
    { 
     sqlcommand command = new sqlcommand(conn, "spLoadData"); 
     command.commandtype=stored proc 
     SqlDataReader reader = command.executereader(); 
     while(reader.read()) 
     { 
      retval.add(new location(reader)); 
     } 
    } 
    return retval; 
} 

のようなものを持っているでしょうが、それはちょうどあなたのアイデアを与えることです。

ORMマッパーを使用すると、たくさんの時間がかかる場合でも時間を節約できます。