У меня есть веб-приложение, которое использует БД для хранения.
Код C # есть два класса страны и компании.
Класс Company содержит свойство со связью
Список (Guid) CountryIds {get; частный набор}
Информация хранится в БД следующим образом:
Компания
Company_Country
Страна
Пример запроса:
select c.* , cc.CountryId
from Company c
inner join Company_Country cc on c.id = cc.CompanyId
where (c.SomeColumn like 'somerestriction')
Вопрос: Каков наиболее эффективный или даже действующий стандарт де-факто для извлечения данных отношений из базы данных?
Варианты, которые я вижу:
используйте вышеупомянутый sql, затем в цикле кода c # возвращайте код, добавляя идентификаторы страны к правильной компании (очень быстро, используя словарь)
выберите список компаний и затем вернитесь к каждой из них с отдельным запросом sql, чтобы получить список идентификаторов стран (самые простые, но большие накладные расходы для повторного подключения к серверу sql)
Используйте T-Sql для возврата countryId в формате xml, затем используйте linq для извлечения списка xml из этого комментария (см. Sql ниже), обратите внимание, что я хотел бы избежать строк идентификатора с разделителями.
Что-то вроде:
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 Другое? (пожалуйста, прокомментируйте)
Большое спасибо
Choco