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