Конечная точка REST Entity Framework для получения всех объектов, имеющих другой объект - PullRequest
0 голосов
/ 28 марта 2020

Мне сложно понять, как я могу вернуть все книги, у которых есть рейтинг. Для каждой книги может применяться рейтинг (отношение «один к нулю или один»).

Класс модели книги:

public class Book
{
    [Key]
    [NotNull]
    [DisplayName("isbn")]
    public string Isbn { get; set; }
    [NotNull]
    [DisplayName("title")]
    [MaxLength(255)]
    [MinLength(1)]
    public string Title { get; set; }
    [NotNull]
    [DisplayName("author")]
    [MaxLength(255)]
    [MinLength(1)]
    public string Author { get; set; }
    [NotNull]
    [DisplayName("year_of_publication")]
    public int yearOfPublication { get; set; }
    [NotNull]
    [DisplayName("publisher")]
    [MaxLength(255)]
    public string publisher { get; set; }
    [JsonIgnore]
    public virtual Rating Rating { get; set; }

}

Класс рейтинга:

 public class Rating
{
    [NotNull]
    [DisplayName("rating_seq")]
    public int Id { get; set; }
    [NotNull]
    [MaxLength(13,ErrorMessage = "ISBN is too long!")]
    [MinLength(1)]
    [ForeignKey("Book")]
    public string Isbn { get; set; }
    [NotNull]
    [DisplayName("book_rating")]
    public int rating { get; set; }

    [JsonIgnore]
    public virtual Book Book { get; set; }
}

По сути, я должен вернуть список книг с рейтингом. Прямо сейчас я думаю о чем-то вроде:

[HttpGet("/ratings")]
    public async Task<ActionResult<IEnumerable<Book>>> GetBooksWithRating()
    {
        var books = await _context.Book
            .Include(l => l.Rating)
            .Where(s => s.Isbn == _context.Rating.Isbn) //not accessible
            .ToListAsync();
        if (books == null)
        {
            return NotFound();
        }
        return books;
    }

Очевидно, что это неверно, но любая помощь в том, как исправить это, будет принята с благодарностью!

1 Ответ

0 голосов
/ 28 марта 2020

Вы пробовали что-то подобное

    var books = await _context.Book
        .Include(b => b.Rating)
        .Where(b => b.Rating != null)
        .ToListAsync();

Здесь мы сообщаем EF Include Rating свойство навигации для всех книг, которые мы получаем, но возвращаем эти книги, только если Rating не null - что означало бы книгу без Rating

...