2011-06-21 3 views
1

私はDBにストレージを使用するウェブアプリを持っています。
コードはC#であり、国と会社の2つのクラスがあります。データベースからの関係データを返す - xml、複数行、その他?

Companyクラスの関係

リスト(GUID)CountryIds {得る;プライベートセット}持つプロパティ含まれる情報をDBに以下のように格納され

: 会社 Company_Country国

例のクエリは次のとおりです。

select c.* , cc.CountryId 
from Company c 
    inner join Company_Country cc on c.id = cc.CompanyId 
where (c.SomeColumn like 'somerestriction') 

質問:データベースから関係データを取り出すのに最も効率的なやり方は何ですか?私はそれを見るよう

オプションは次のとおりです。

  1. (辞書を使用して非常に速い)正しい会社に国にidを追加戻っコードをC#コードループで、その後上記のSQLを使用します
  2. 企業のリストを選択してから返すように

  3. 利用T-SQLを(SQLのサーバに再接続する最も簡単なものの、大きなオーバーヘッド)国IDのリストを取得するには、別のSQLクエリを使用して、各1のために戻って行きます国I dをXML形式で入力し、linqを使用してそのコメントからXMLリストを抽出します(下のsqlを参照)。区切られたID文字列は避けたいと思います。

ような何か:

with cte(Id, CountryId) as 
(
select CompanyId, 
(SELECT CountryId as CountryId 
    from Company_Country p2 
    WHERE p2.CompanyId = p1.CompanyId 
    FOR XML PATH('')) AS CountryId 
from Company_Country p1 
group by CompanyId 
) 

select ss.*, cte.countryid 
from StandardKitContent ss 
    inner join cte on cte.id = ss.id 
order by ss.id 

4その他?あなたは.NETの最新バージョンにしている場合は、私はEntity Frameworkのをお勧めします

感謝 チョコ

答えて

0

を(コメントしてください)。データベーステーブルをスラップアップし、関係を特定します(自動的にそうでない場合は、デザイナーまたはXML定義で指定できます)。これが完了すると、それを正確に反映するビジネスオブジェクトが生成され、オブジェクトに対してCRUD操作を実行してデータベースに永続化させることができます。

幸運を祈る!

+0

ありがとう、私たちは最新バージョンを使用しています。私はいつも自分のデータベースをデータアクセス層にコントロールできなくなっていると懐疑的でしたが、まもなく私は現代デザインの支配権を放棄しなければならないようです。 :) –

+0

EFでのデータアクセス(例えば、動的SQLの代わりに呼び出されるビューやSprocを指定するなど)を何らかの制御で行うことができます。 –

関連する問題