DTOs в WCF RIA Services Master-Detail - PullRequest
1 голос
/ 13 мая 2011

Мне нужно создать сценарий 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  
}

Примечание: я использую Entity Framework EDM (генерируется ObjectContext и EntityObject с).

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

enter image description here

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

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

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

Обновление 2
Клиент также хочет, чтобы для каждого элемента в списке также были все его задания.
На основе иерархии, которую я описал выше, для Customer - выберите все свои вакансии;для Contact или Person - выберите Customer s Job s (если его Customer).Vendor или Employee s не предназначены для регистрации с Job s.

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

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

Так что, по вашему мнению, эксперты?

1 Ответ

0 голосов
/ 16 мая 2011

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

  1. Представления базы данных не обязательно являются правильным подходом
  2. Вернет частичные объекты через DOC POCO из службы домена.
...