DTO в WCF RIA Services Master-Detail

Мне нужно создать сценарий Master-Detail, где в мастере я могу показать множество типов элементов, которые все реализуют IDto:

interface IDto
{
  int Id { get; set; }
  string Title { get; set; }
  EntityType { get; set;
}

enum EntityType
{
  Contact,
  Person,
  Company,
  Customer
  Employee,
  Vendor,
  Job  
}

Примечание. Я использую EDM Entity Framework (сгенерированные ObjectContext и EntityObjects).

Иерархия классов такова, что Contact является подклассом для Person и Company, Person является базовым классом Employee, Company является базовым классом Vendor. Customer имеет свойство Contact, которое может быть Contact или Person, и имеет список Job.

введите описание изображения здесь

Теперь в главном списке я хочу загрузить коллекцию DTO из DomainService (это LinqToEntitiesDomainService<ObjectContext>, и я хочу, чтобы были выбраны только указанные поля в IDto контракте, а затем, когда они выбраны, загрузить всю сущность со всеми ее полями / связанные данные и т. д. в области подробностей.

Обновление: я подумал о другой идее.
Создайте представление базы данных (SQL2008), которое возвращает 3 строки указанного выше IDto контракта, где перечисление будет сохранено как int или tinyint (затем изменится перечисление в байт), то в edm я могу создать иерархию таблиц для каждого типа EntityType, хранящегося в списке, и вернуть его из DomainService.

Кстати, все значения перечисления будут использоваться для запроса, на самом деле ни одна сущность не вернет Contact для своего свойства EntityType, потому что Contact является абстрактным и может быть либо Person, либо Company, но я все еще хочу иметь возможность запрашивать оба из них.

Обновление 2
Заказчик также хочет, чтобы для каждого элемента в списке также были выполнены все его задания.
На основе иерархии, описанной выше, для Customer - выберите все его рабочие места; для Contact или Person - выберите его Customer's Jobs (если это Customer). Vendor или Employees не предназначены для регистрации с Jobs.

Я думаю, что единственный способ сделать это - использовать представления базы данных.
Я ошибаюсь? Какие последствия? Я использую SL5 с RIA.

Хороший ли способ просмотра? Или я должен обрабатывать все запросы в клиенте, используя клиентский POCO? потому что на самом деле это значение используется только для получения имени контакта и его заданий. дальнейшие детали и манипуляции будут выполнены в других представлениях самих Entity сущностей.

Так что вы думаете, эксперты?


person Shimmy Weitzhandler    schedule 12.05.2011    source источник


Ответы (1)


Я нашел этот пост очень полезным, и он действительно позволил мне прийти к решению.

  1. Представления базы данных - не обязательно правильный подход
  2. Вернет частичные объекты через POCO DTO из службы домена.
person Shimmy Weitzhandler    schedule 16.05.2011