Web API 未返回特定的实体列表
Web API not returning a specific List of entities
我只对来自 edm 框架的 BOOKS 实体感兴趣。
但是我得到了一些其他实体以及 BOOKS 实体。
这是我的网站 API 控制器
public class BooksController : ApiController
{
private MyECommerceDBEntities db = new MyECommerceDBEntities();
// GET: api/Books
[ResponseType(typeof(BOOKS))]
public IQueryable<BOOKS> GetBOOKS()
{
return db.BOOKS.OrderByDescending(x => x.BOOKID).Skip(977).Take(5).AsQueryable<BOOKS>();
}
}
这是我返回的 JSON 字符串
[{"$id":"1","PRODUCTS":{"$id":"2","MOVIES":[],"ORDERITEMS":[],"PRODUCTDETAILS":[],"SUBCATEGORIES":{"$id":"3","CATEGORIES":{"$id":"4","SUBCATEGORIES":[{"$ref":"3"},{"$id":"5","CATEGORIES":{"$ref":"4"},"PRODUCTS":[],"SUBCATEGORYID":2,"CATEGORYID":1,"SUBCATEGORY":"Kindle Edition","DESCRIPTION":"Kindle EBook"}],"CATEGORYID":1,"CATEGORY":"Books","DESCRIPTION":"Books"},"PRODUCTS":[{"$ref":"2"},{"$id":"6","MOVIES":[],"ORDERITEMS":[],"PRODUCTDETAILS":[],"SUBCATEGORIES":{"$ref":"3"},"REVIEWS":[],"SELLERS_PRODUCTS":[],"CART":[],"BOOKS":[{"$id":"7","PRODUCTS":{"$ref":"6"},"BOOKID":1,"PRODUCTID":1964,"ISBN10":"ISBN-10: 1-934356-43","ISBN13":"ISBN-13: 978-1-93435","BOOKNAME":"Agile Coaching","DESCRIPTION":"","AUTHOR":null,"PUBLISHER":null,"PAGES":"236","BOOKIMAGE":"Agile `Coaching.jpeg","PUBLISHEDDATE":null}],"PRODUCTID":1964,"SUBCATEGORYID":1,"NAME":"Agile Coaching","DESCRIPTION":"","PRICE":0.0},{"$id":"8","MOVIES":[],"ORDERITEMS":[],"PRODUCTDETAILS":[],"SUBCATEGORIES":{"$ref":"3"},"REVIEWS":[],"SELLERS_PRODUCTS":[],"CART":[],"BOOKS":`
它可能在响应中被序列化时包括实体的导航属性。
尽量避免通过网络直接从 Entity Framework 返回实体。
创建一个 DTO 模型,其中只包含您希望返回给调用者的相关信息。
简单示例
//Book model
public class Book {
public int BookKId { get; set; }
public int ProductId { get; set; }
public string ISBN10 { get; set; }
public string ISBN13 { get; set; }
public string BookName { get; set; }
//...other properties
}
并在从操作返回时将实体映射到模型
// GET: api/Books
[ResponseType(typeof(Book[]))]
public IHttpActionResult GetBOOKS() {
var books = db.BOOKS.OrderByDescending(x => x.BOOKID).Skip(977).Take(5)
.Select(book => new Book {
BookKId = book.BOOKID,
BookName = book.BOOKNAME
//...other properties
})
.ToArray();
return Ok(books);
}
关于 Nkosi 的上述回答,这里是对 EF Core 中不同加载类型的解释。
https://docs.microsoft.com/en-us/ef/core/querying/related-data
我只对来自 edm 框架的 BOOKS 实体感兴趣。 但是我得到了一些其他实体以及 BOOKS 实体。
这是我的网站 API 控制器
public class BooksController : ApiController
{
private MyECommerceDBEntities db = new MyECommerceDBEntities();
// GET: api/Books
[ResponseType(typeof(BOOKS))]
public IQueryable<BOOKS> GetBOOKS()
{
return db.BOOKS.OrderByDescending(x => x.BOOKID).Skip(977).Take(5).AsQueryable<BOOKS>();
}
}
这是我返回的 JSON 字符串
[{"$id":"1","PRODUCTS":{"$id":"2","MOVIES":[],"ORDERITEMS":[],"PRODUCTDETAILS":[],"SUBCATEGORIES":{"$id":"3","CATEGORIES":{"$id":"4","SUBCATEGORIES":[{"$ref":"3"},{"$id":"5","CATEGORIES":{"$ref":"4"},"PRODUCTS":[],"SUBCATEGORYID":2,"CATEGORYID":1,"SUBCATEGORY":"Kindle Edition","DESCRIPTION":"Kindle EBook"}],"CATEGORYID":1,"CATEGORY":"Books","DESCRIPTION":"Books"},"PRODUCTS":[{"$ref":"2"},{"$id":"6","MOVIES":[],"ORDERITEMS":[],"PRODUCTDETAILS":[],"SUBCATEGORIES":{"$ref":"3"},"REVIEWS":[],"SELLERS_PRODUCTS":[],"CART":[],"BOOKS":[{"$id":"7","PRODUCTS":{"$ref":"6"},"BOOKID":1,"PRODUCTID":1964,"ISBN10":"ISBN-10: 1-934356-43","ISBN13":"ISBN-13: 978-1-93435","BOOKNAME":"Agile Coaching","DESCRIPTION":"","AUTHOR":null,"PUBLISHER":null,"PAGES":"236","BOOKIMAGE":"Agile `Coaching.jpeg","PUBLISHEDDATE":null}],"PRODUCTID":1964,"SUBCATEGORYID":1,"NAME":"Agile Coaching","DESCRIPTION":"","PRICE":0.0},{"$id":"8","MOVIES":[],"ORDERITEMS":[],"PRODUCTDETAILS":[],"SUBCATEGORIES":{"$ref":"3"},"REVIEWS":[],"SELLERS_PRODUCTS":[],"CART":[],"BOOKS":`
它可能在响应中被序列化时包括实体的导航属性。
尽量避免通过网络直接从 Entity Framework 返回实体。
创建一个 DTO 模型,其中只包含您希望返回给调用者的相关信息。
简单示例
//Book model
public class Book {
public int BookKId { get; set; }
public int ProductId { get; set; }
public string ISBN10 { get; set; }
public string ISBN13 { get; set; }
public string BookName { get; set; }
//...other properties
}
并在从操作返回时将实体映射到模型
// GET: api/Books
[ResponseType(typeof(Book[]))]
public IHttpActionResult GetBOOKS() {
var books = db.BOOKS.OrderByDescending(x => x.BOOKID).Skip(977).Take(5)
.Select(book => new Book {
BookKId = book.BOOKID,
BookName = book.BOOKNAME
//...other properties
})
.ToArray();
return Ok(books);
}
关于 Nkosi 的上述回答,这里是对 EF Core 中不同加载类型的解释。
https://docs.microsoft.com/en-us/ef/core/querying/related-data