Мне нужно создать сценарий 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
и EntityObject
s).
Иерархия классов такова, что 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 Job
s (если это Customer
). Vendor
или Employee
s не предназначены для регистрации с Job
s.
Я думаю, что единственный способ сделать это - использовать представления базы данных.
Я ошибаюсь? Какие последствия? Я использую SL5 с RIA.
Хороший ли способ просмотра? Или я должен обрабатывать все запросы в клиенте, используя клиентский POCO? потому что на самом деле это значение используется только для получения имени контакта и его заданий. дальнейшие детали и манипуляции будут выполнены в других представлениях самих Entity
сущностей.
Так что вы думаете, эксперты?