«Ошибка получения значения из« MyEntity »в« System.Data.Entity.DynamicProxies ... » - PullRequest
0 голосов
/ 28 июня 2019

Я вставляю сущность с этим запросом, и он успешно выполняется.

Запрос

{
    "Title": "Book 1"
}

Ответ

{
    "id": 1,
    "title": "Book 1",
    "serialId": "00000000-0000-0000-0000-000000000000",
    "borrows": null,
    "votes": null
}

Я проверил базу данных и есть строка Book с id = 1. Но теперь, когда я пытаюсь получить список, он возвращает ошибку, потому что DbSet пуст после вставки.

var books = db.Books; // count = 0

enter image description here

Ответ для /books является исключением:

"exceptionMessage": "The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.",

И внутреннее исключение включает Error getting value from 'Borrows', поэтому я подумал, что это может быть связано скак определяется отношение, также в базе данных пока нет сущностей Borrow.

"exceptionMessage": "Error getting value from 'Borrows' on 'System.Data.Entity.DynamicProxies.Book_6E27A1F717202EA02AE923CCC6405EF9A501FE9A54A71841CEB43E942224D88A'.",
        "exceptionType": "Newtonsoft.Json.JsonSerializationException",

Сущность Book имеет свойство навигации List с определенной взаимосвязью:

modelBuilder.Entity<Book>().HasMany<Borrow>(b => b.Borrows);

Объект Book, определенный со списком объектов Borrow:

public virtual List<Borrow> Borrows { get; set; }

Миграция Book имеет только Id для первичного ключа:

CreateTable(
            "dbo.Books",
            c => new
                {
                    Id = c.Int(nullable: false, identity: true),
                    Title = c.String(),
                    SerialId = c.Guid(nullable: false),
                })
            .PrimaryKey(t => t.Id);

Вопрос : Что вызывает это исключение, это связано с тем, как я определил отношения между Book и Borrow?Я видел примеры отношений, которые должны быть определены в обоих направлениях. Нужно ли мне определять отношения, чтобы как-то не требовать заимствования?Я заметил, что DbSet Count = 0 возникало в прошлом, когда были результаты, поэтому я думаю, что это также может быть проблемой с NewtonSoft.Я не уверен, что здесь происходит.

Полное исключение: https://pastebin.com/raw/BvUfBnKU

1 Ответ

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

Я получил его, используя этот ответ: https://stackoverflow.com/a/14317598/11419029, возвращая список, а не IQuerybly.

Я изменил его на это:

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

Из этого:

// GET: api/Books
public IQueryable<Book> GetBooks()
{
    var books = db.Books;
    return books;
}

Но я все еще не уверен, в чем проблема, другой ответ сказал, что это связано с выполнением запроса при повторении результатов другого запроса.Запуск ленивой загрузки.Теперь я обеспокоен тем, что он выполняет вложенные запросы, запрашивая заимствования для каждого экземпляра книги.

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