Циркулярная ссылка для структуры сущности через сущность в списке свойств навигации - PullRequest
0 голосов
/ 28 июня 2019

Я выбираю объекты с вложенными объектами в свойствах навигации.Проблема в том, что у меня есть Book со свойством навигации Borrows, и у каждого Borrow есть свойство навигации Book со ссылкой на книгу, поэтому есть круговая ссылка.Я думаю, что мне следует сделать, это найти способ включить список заимствований книги и в каждом заимствовании не включить обратную ссылку через навигацию внутри этого Borrow.Book?Я новичок в Entity Framework и не знаю, как это сделать, я слышал о типах загрузки для свойств навигации, но я не уверен, подходит ли она для этой ситуации.

Аналогично, всякий раз, когда я получаюсписок заимствованных книг Я хотел бы, чтобы Заем включал Книгу, но не список заимствований в Книге Заимствования, которые приводят к циклическим ссылкам.

Контроллер веб-API /books:

public List<Book> GetBooks()
{
    var books = db.Books.ToList();
    return books;
}

Ошибка:

{
    "message": "An error has occurred.",
    "exceptionMessage": "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.",
    "exceptionType": "System.InvalidOperationException",
    "stackTrace": null,
    "innerException": {
        "message": "An error has occurred.",
        "exceptionMessage": "Self referencing loop detected for property 'book' with type 'System.Data.Entity.DynamicProxies.Book_6E27A1F717202EA02AE923CCC6405EF9A501FE9A54A71841CEB43E942224D88A'. Path '[0].borrows[0]'.",
        "exceptionType": "Newtonsoft.Json.JsonSerializationException",
        "stackTrace": "   at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.CheckForCircularReference(JsonWriter writer, Object value, JsonProperty property, JsonContract contract, JsonContainerContract containerContract, JsonProperty containerProperty)
...

1 Ответ

0 голосов
/ 28 июня 2019

Одно из возможных решений для вас здесь - это иметь промежуточную структуру

Книга -> Заем -> Лицо Лицо -> Список заимствований -> Книга

Заимствование будет содержать только детали книги иПерсональные данные.Книга будет связана с заимствованием, а не лицом / заемщиком напрямую.У этого человека будет коллекция Borrow, которая не связана с Book напрямую.Таким образом, вы разрешите круговую ссылку.

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