【发布时间】: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);
问题:是什么导致了这个异常,是不是和我如何定义Book和Borrow之间的关系有关?我已经看到必须在两个方向上定义关系的示例,我是否需要将关系定义为不需要以某种方式借用?我注意到 DbSet Count = 0 过去在有结果时发生,所以我认为这也可能是 NewtonSoft 的问题。我不确定这里发生了什么。
【问题讨论】:
标签: entity-framework json.net ef-code-first