Веб-API не возвращает определенный список объектов - PullRequest
0 голосов
/ 05 июля 2018

Меня интересуют сущности BOOKS только из среды edm. Однако я получаю некоторые другие сущности вместе с сущностью 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":`

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Более подробный ответ от Nkosi, вот объяснение различных типов загрузки в EF Core.

https://docs.microsoft.com/en-us/ef/core/querying/related-data

0 голосов
/ 05 июля 2018

Вероятно, он включает свойства навигации объекта, когда он сериализуется в ответе.

Старайтесь не возвращать сущности напрямую из 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);
}
...