LINQ to SQL запрашивает представление для заполнения объектной модели - PullRequest
1 голос
/ 13 июля 2010

У нас есть следующая модель данных:

CalendarAppointment 1 <------> * AppointmentRole * <--------> 1 Person (or Group)

С календарем может быть связано несколько человек. Каждый человек может играть разную роль (посещение, вождение, посадка или высадка). (Человек также может быть членом группы, и группы также могут быть связаны с назначениями, но это для дополнительной цели этого вопроса).

В начале веб-запроса на рендеринг календаря мы хотим получить все встречи, относящиеся к зарегистрированному участнику за указанный диапазон дат.

Таблица «Вождение» - это встреча в календаре. Рендеринг выглядит так:

foreach (var appointment in dataContext.Appointments.Where(person has appointment role)]
{
   ... render appointment ...
   foreach (role)
      ... render role...

В настоящее время это выполняется с помощью запросов LINQ to SQL к представлению, которое мы определили в SQL Server для объединения столбцов из CalendarAppointment, AppointmentRole и Person. Это лучший способ сделать запрос, но как только данные окажутся в объектном мире, было бы удобнее работать с объектами, которые отображаются в составные таблицы, составляющие представление.

Так что в объектном мире я хочу иметь дело с ...

 class CalendarAppointment
 {
     IEnumerable<AppointmentRole> Roles ...

 ...

 class AppointmentRole
 {
    Person Person ...

Мы также столкнулись с проблемой, связанной с юнит-тестами. Намного проще настроить сценарий, заполнив дискретные таблицы, но затем запросив представление. Наше представление данных в памяти не сделает этого за нас, поэтому мы вместо этого заполняем представление представления в памяти.

Итак, мы хотим выполнить запрос к представлению, а затем разбить «результат» на структуру объекта, которая отражает базовые таблицы. Кажется, единственный способ сделать это - выполнить отдельные запросы к таблицам:

  1. Таблица ролей назначения запроса
  2. Запрос календарных встреч с использованием набора внешних ключей встречи из первого запроса.
  3. Запрос таблицы персоны с использованием набора внешних ключей персоны из первого запроса.

Это кажется довольно запутанным. Кажется, это будет распространенной проблемой в мире ORM. У кого-нибудь есть понимание: 1) как выполнить запрос к представлению и как он заполняет объекты таблицы на другой стороне, или 2) другой шаблон или подход к проблеме?

1 Ответ

1 голос
/ 13 июля 2010

Вы смотрели на AutoMapper ?

AutoMapper использует плавный API конфигурации для определения стратегии сопоставления объект-объект. AutoMapper использует основанный на соглашении алгоритм сопоставления для сопоставления значений источника и назначения. В настоящее время AutoMapper ориентирован на сценарии проецирования моделей для выравнивания сложных объектных моделей для DTO и других простых объектов, дизайн которых лучше подходит для сериализации, связи, обмена сообщениями или просто для защиты от коррупции между доменом и уровнем приложения.

Я недавно использовал это для преобразования сущностей LINQ в более простые и плоские объекты, и до сих пор это работало хорошо.

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