EntityFrameworkCore , a agregat jako widok w bazie

0

Mam obiekty:

public class Category{
    public Guid Id {get; set;}
    public string Name {get; set;}
    public IList<Book> Books {get; set;}  
}

public class Book{
     public Guid Id {get; set;}
     public Guid CategoryId {get; set;}
     public string Title {get; set;}
}

I teraz chciałbym wyciągnąć z bazy listę kategorii zawierającą książki. Chciałbym to zrobić za pomocą widoku.
Konfiguruję EF Core:


public DbSet<Category> Categories { get; set; }

oraz

modelBuilder.Entity<Category>(e => e.ToView("CategoriesView").HasNoKey());

następnie tworzę widok:

SELECT        c.Id, c.Name, b.Id , b.CategoryId, b.Title
FROM            dbo.Categories AS c 
LEFT OUTER JOIN  dbo.Books AS b ON c.Id = b.CategoryId

Później w kodzie wywołuję:

var list = _db.Categories.ToList();

i dostaję z bazy listę obiektów Category, ale w każdej Books = null

Gdzie popełniam błąd?

0

Gdybyś nie miał widoku, EF Core wymagałby pewnie Include (zależy czy masz lazy loading) i zrobił N+1 pobierając Books dla każdego Category. A tak próbuje spłaszczyć widok do klasy, stąd null - to też dziwne, czemu nie wyjątek. Na szybko zrobiłbym odwrotnie - pobrałby jako Books i potem jakieś Group By w C# po Category.

1 użytkowników online, w tym zalogowanych: 0, gości: 1