ADO.NET Entity Framework и служба WCF - PullRequest
       36

ADO.NET Entity Framework и служба WCF

0 голосов
/ 17 августа 2010

У меня есть простая модель ADO.NET Entity Framework 4.0 (edmx), которая определяет таблицы базы данных со связями внешнего ключа.

Как я могу отправить эти объекты клиенту Windows Phone 7?Я создал службу WCF (с использованием WShttpbinding) методом ...

public List<LocationCity> ListCities()
{    
   var dc = ObjectFactory.GetInstance<TestEntities>();
   var locs = dc.LocationCities.Take(10).ToList();
   return locs;
}

Я также создал простое консольное приложение для использования этой службы, но оно не работает ... В трассировкеЯ вижу исключение

Максимальное количество элементов, которые можно сериализовать или десериализовать в графе объектов, равно '65536'

в System.ServiceModel.Dispatcher.DataContractSerializerOperationFormatter.SerializeParameterPart

Затем я изменил MaxItemsInObjectGraph на большое число, просто чтобы посмотреть, что произойдет, и тогда я получу исключение переполнения стека.Поэтому мне кажется, что dataContractSerializer перемещается по циклическим свойствам на графе объектов и входит в рекурсивный цикл.

Все, что я хочу сделать, это отправить 10 объектов LocationCity клиенту (будь то Windows Phone или Console).

Полагаю, я мог бы создать отдельные сущности DataContract POCO и заполнить их из выбора в контексте ... однако я действительно не хочу дублировать классы без веской причины.Я полагаю, что я, должно быть, что-то делаю не так.

Буду очень признателен за помощь!

Ответы [ 2 ]

2 голосов
/ 17 августа 2010

Хитрость для обращения с циклическими ссылками заключается в использовании [DataContract (IsReference = true)]. Свойство IsReference доступно с версии .NET 3.5 с пакетом обновления 1 (SP1), поэтому оно не должно быть для вас проблемой.

С уважением, Ладислав

0 голосов
/ 17 августа 2010

Я установил для LazyLoadingEnabled значение true в конструкторе сущностей. Просто нужно было установить его на false и все нормально!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...