Я заметил, что люди записали об этой проблеме циклической ссылки вполне немного прежде, но никакое решение никогда не отправлялось.
Я говорю об этой ошибке: "Циклическая ссылка была обнаружена при сериализации объекта типа 'DocInvoice. Модели. Клиенты".
Кто-либо попытался сериализировать его к JSON с библиотекой Json.NET?
Если у меня есть Linq к запросам объектов, моя единственная опция состоит в том, чтобы вручить свойства объекта кода и не учесть тех, которые являются свойствами Navigational? Поскольку это - те делающие проблемы..
Это является раздражающим хотя, потому что необходимо вручить запись как десятки (или больше) свойства объекта в Linq "новый" оператор. Например, если я хочу все свойства, я могу сделать это, но это приводит к ошибке циклической ссылки:
var clients = from client in edmx.Clients
from postcode in edmx.PostCodes
where (client.client_firstname.StartsWith(q) ||
client.client_lastname.StartsWith(q)) &&
postcode.postcode == client.PostCodes.postcode
select new {client, postcode};
единственная другая опция:
select new { client.client_id,
client.client_firstname,
....., ... ,
postcode.postcode
}; ...
Проецирование на анонимный тип (ваш второй пример) - правильный способ сделать это. Это единственное, что предотвращает утечку информации из вашего кода, если в дальнейшем к сущности будут добавлены дополнительные свойства. Анонимный тип четко ограничивает то, что возвращает ваш код.