【问题标题】:"Error getting value from 'MyEntity' on 'System.Data.Entity.DynamicProxies..."“从‘System.Data.Entity.DynamicProxies’上的‘MyEntity’获取值时出错......”
【发布时间】:2019-11-10 06:36:21
【问题描述】:

我用这个请求插入一个实体,它是成功的。

请求

{
    "Title": "Book 1"
}

回应

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

我检查了数据库,有一个 id = 1 的 Book 行。但是现在当我尝试获取一个列表时,它返回一个错误,因为插入后 DbSet 为空。

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

/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',所以我认为这可能与关系的定义方式有关,数据库中还没有借用实体。

"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);

用借用实体列表定义的图书实体:

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);

问题:是什么导致了这个异常,是不是和我如何定义BookBorrow之间的关系有关?我已经看到必须在两个方向上定义关系的示例,我是否需要将关系定义为不需要以某种方式借用?我注意到 DbSet Count = 0 过去在有结果时发生,所以我认为这也可能是 NewtonSoft 的问题。我不确定这里发生了什么。

完全例外: https://pastebin.com/raw/BvUfBnKU

【问题讨论】:

    标签: entity-framework json.net ef-code-first


    【解决方案1】:

    我通过使用这个答案得到了它:https://stackoverflow.com/a/14317598/11419029,返回一个 List 而不是 IQueryably。

    我改成这样了:

    // 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;
    }
    

    但我仍然不确定问题出在哪里,另一个answer 说这与在迭代另一个查询的结果时正在执行的查询有关。触发延迟加载。现在我担心它正在执行嵌套查询,查询每本书的借阅情况。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-13
      • 2016-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-01
      相关资源
      最近更新 更多