2010-10-02 4 views
0

У меня есть существующее веб-приложение, которое использует объекты EF и POCO. Я хочу улучшить работу клиента, подвергая некоторые из моих объектов через WCF (JSON). У меня это нормально работает, но я не уверен, как обрабатывать производные объекты (не уверен, что это правильный термин) или IEnumerable анонимные объекты, если хотите.Создание пользовательских объектов для wcf

Скажем, у меня есть 3 таблицы структурированы следующим образом:

Шаблоны

ID 
Template 

Группы

ID 
Group 

экземпляров

ID 
TemplateID 
GroupID 

Это, очевидно, отношение типа «один ко многим». Я правильно настроил настройки навигации и сильно набрал свойства объектов. Однако, как я могу отправить сериализованный анонимный объект (ы) по проводке. Подобно объекту, который отправляет все экземпляры, которые равны groupid = 1, и включают имена шаблона и объекта.

Могу ли я что-то отсутствует, или мне нужно создать еще один объект класса для WCF, который будет выглядеть следующим образом:

WCF Объект

InstanceID 
TemplateID 
TemplateName 
GroupID 
GroupName 

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

Ваши предложения приветствуются. С уважением

ответ

1

Основываясь на том, что вы делаете, я бы предложил посмотреть OData с службами данных WCF. Вы заявляете, что хотите иметь возможность отправлять все экземпляры, где groupid = 1 - OData отлично подходит для такого типа фильтрации.

Если вы хотите придерживаться своего текущего подхода и не использовать OData, тогда мой первый вопрос - почему вы отправляете анонимные типы вообще? Вы можете делать то, что ищете (все экземпляры с groupid = 1), не отправляя анонимный тип. В вашем предложении select вы просто создаете новые экземпляры ваших конкретных объектов, а не создаете анонимные типы. Если ваш запрос действительно просто фильтрует и не выполняет какой-либо значимой проекции с помощью selct на анонимный тип, то я не вижу причин отправлять обратно анонимный тип вообще.

+0

Мне показалось, что я знаком с OData, но я взял ваш совет и потратил еще некоторое время на рассмотрение спецификации и нашел, что это то, что я искал. Я предполагаю, что мне показалось, что лучше всего использовать таблицы данных только в том виде, в каком они существуют в db как объекты. Я не был уверен, как разобраться с коллекциями различных свойств объекта. odata.org дает несколько отличных примеров. Спасибо, Стив. – trevorc