WCF + отправка сгенерированных объектов linq

У меня есть объекты, созданные из моего .dbml. Таким образом, некоторые объекты имеют отношение «один ко многим», и в сущностях он был сгенерирован как EntitySet.

Кроме того, у меня есть приложение-служба рабочего процесса WCF, которое содержит .xamlx с бизнес-логикой.

Итак, используя этот .xamlx, я пытаюсь отправить объекты, которые были созданы ранее, клиенту, но у меня возникает исключение «Базовое соединение было закрыто: соединение было закрыто неожиданно».

EntitySet ‹> был добавлен в KnonwTypes. Режим разделения в файле .dbml имеет значение «Нет».

Итак, не могли бы вы рассказать мне, как я могу решить эту проблему?


person Shersh    schedule 17.04.2011    source источник
comment
ОБНОВЛЕНИЕ: я изменил режим сериализации на однонаправленный, и он работает, но есть следующая проблема: для одного из объектов некоторые свойства не были определены с помощью DataMemberAttribute и не отображаются в клиенте ... Как я могу решить эту проблему?   -  person Shersh    schedule 17.04.2011
comment
Marc_s, как я могу добавить этот атрибут, если код создается Visual Studio?   -  person Shersh    schedule 17.04.2011
comment
Вы можете использовать альтернативный метод для создания ваших классов, который поддерживает такие вещи - например, Шаблоны Linq-to-SQL T4 Дэмиена Гуарда (бесплатно) или фреймворк CodeSmith PLinqO (для использования которого требуется лицензия CodeSmith)   -  person marc_s    schedule 17.04.2011
comment
Но в основном, если у вас есть SerializationMode = Unidirectional, встроенный конструктор Linq-to-SQL должен делать это тоже автоматически. Возможно, вам нужно удалить эту таблицу из вашей модели и снова добавить ее, чтобы она подобрала этот атрибут [DataMember] ...   -  person marc_s    schedule 17.04.2011


Ответы (1)


есть внутреннее исключение?

я предполагаю, что это круговая ссылка, вызванная свойствами навигации.

в этом случае у вас есть несколько вариантов:

  • удалите виртуальное ключевое слово из свойств навигации и с нетерпением загрузите все. Примечание: не уверен, применимо ли это к linq to sql.
  • сопоставьте свои сущности с простыми объектами dto.
  • использовать сериализатор, поддерживающий циклические ссылки (встроенный в .net - нет).
person David Wick    schedule 17.04.2011
comment
Да, существует внутреннее исключение, трассировка стека внутреннего исключения: в System.Net.HttpWebRequest.GetResponse () в System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply) (TimeSpan timeSpan time - person Shersh; 17.04.2011
comment
Я забочусь о простых объектах ... но так сложно сопоставить все объекты, и я думаю, что глупо делать это, когда у меня есть ADO.NET ... - person Shersh; 17.04.2011
comment
automapper.codeplex.com или valueinjecter.codeplex.com сделать жизнь проще - person David Wick; 17.04.2011