вернуть данные отношений из базы данных - XML, многострочный, другие? - PullRequest
1 голос
/ 21 июня 2011

У меня есть веб-приложение, которое использует БД для хранения.
Код 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')

Вопрос: Каков наиболее эффективный или даже действующий стандарт де-факто для извлечения данных отношений из базы данных?

Варианты, которые я вижу:

  1. используйте вышеупомянутый sql, затем в цикле кода c # возвращайте код, добавляя идентификаторы страны к правильной компании (очень быстро, используя словарь)

  2. выберите список компаний и затем вернитесь к каждой из них с отдельным запросом sql, чтобы получить список идентификаторов стран (самые простые, но большие накладные расходы для повторного подключения к серверу sql)

  3. Используйте 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

1 Ответ

0 голосов
/ 22 июня 2011

Если вы используете последнюю версию .NET, я рекомендую Entity Framework;он будет отбирать таблицы базы данных, определять отношения (если не автоматически, то вы можете указать их в определении дизайнера или XML).Как только это будет сделано, он сгенерирует бизнес-объекты, которые будут точно отражать их, и вы сможете выполнять операции CRUD для ваших объектов и сохранять их в вашей базе данных.

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...