私は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')
質問:データベースから関係データを取り出すのに最も効率的なやり方は何ですか?私はそれを見るよう
オプションは次のとおりです。
は
(辞書を使用して非常に速い)正しい会社に国にidを追加戻っコードをC#コードループで、その後上記のSQLを使用します
企業のリストを選択してから返すように
利用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のをお勧めします
感謝 チョコ
ありがとう、私たちは最新バージョンを使用しています。私はいつも自分のデータベースをデータアクセス層にコントロールできなくなっていると懐疑的でしたが、まもなく私は現代デザインの支配権を放棄しなければならないようです。 :) –
EFでのデータアクセス(例えば、動的SQLの代わりに呼び出されるビューやSprocを指定するなど)を何らかの制御で行うことができます。 –