Как преобразовать несколько типов объектов WCF RIA в один тип для использования в ViewModel - PullRequest
0 голосов
/ 29 июня 2011

Извинения, если слишком много / недостаточно подробностей или некоторые из них неактуальны, это мой первый пост на этой доске:

Фон

Я сейчас занимаюсь разработкойприложение на основе Silverlight 4 и WCF RIA (SP1) в C # с использованием VS2010.Стек: SQL Server -> nHibernate -> Служба домена -> Агент службы -> Клиент Silverlight 4 (MVVM)

У меня есть 4 таблицы в базе данных с одинаковыми полями в каждой таблице, каждая из которых содержит различный 'тип »тех же данных.

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

Я создал POCO для каждой таблицы и однодоменную службу, которая обрабатывает и обновляет четыре различных набора сущностей.Эти типы проецируются на клиент Silverlight, и все элементы CRUD работают должным образом.

Задача

У меня есть модель представления, в которой содержится коллекция ObservableCollection, где T равно единице.из 4 типов сущностей, однако я не хочу использовать 4 коллекции для хранения разных типов сущностей.Пользовательский интерфейс позволит пользователю выбрать тип, и я хочу использовать ту же коллекцию и привязки пользовательского интерфейса для редактирования этих данных.

Я пытался

  • Создание общей службы домена, но они не поддерживаются.

  • Наличие типов сущностей на стороне сервера наследуется от абстрактного класса или реализует интерфейс, но доменные службы не проецируют абстрактные классы или интерфейсы.

  • Создание частичных классов на стороне клиента для 4 проецируемых сущностейкоторые реализуют интерфейс на стороне клиента.Однако, когда я пытаюсь присвоить ObservableCollection<MyEntity> для ObservableCollection<MyEntityInterface>, я получаю следующую ошибку:

Cannot implicitly convert type 'System.Collections.ObjectModel.ObservableCollection<BusinessDomain.StandardInterestRate>' to 'System.Collections.ObjectModel.ObservableCollection<BusinessDomain.IInterestRate>'

Я подозреваю, что причина в том, что StandardInterestRate наследуется отRIA Entity class.Любые мысли приветствуются.

1 Ответ

0 голосов
/ 29 июня 2011

Попробуйте

ObservableCollection<MyEntity> entities = ...
ObservableCollection<MyEntityInterface> iEntities = new ObservableCollection(entities.Cast<MyEntityInterface>());
...