У нас есть следующая модель данных:
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 ...
Мы также столкнулись с проблемой, связанной с юнит-тестами. Намного проще настроить сценарий, заполнив дискретные таблицы, но затем запросив представление. Наше представление данных в памяти не сделает этого за нас, поэтому мы вместо этого заполняем представление представления в памяти.
Итак, мы хотим выполнить запрос к представлению, а затем разбить «результат» на структуру объекта, которая отражает базовые таблицы. Кажется, единственный способ сделать это - выполнить отдельные запросы к таблицам:
- Таблица ролей назначения запроса
- Запрос календарных встреч с использованием набора внешних ключей встречи из первого запроса.
- Запрос таблицы персоны с использованием набора внешних ключей персоны из первого запроса.
Это кажется довольно запутанным. Кажется, это будет распространенной проблемой в мире ORM. У кого-нибудь есть понимание: 1) как выполнить запрос к представлению и как он заполняет объекты таблицы на другой стороне, или 2) другой шаблон или подход к проблеме?