Relations d'entité pour EF7 MVC6

asp.net-core entity-framework-core

Question

Mon objectif ici est d’utiliser EF7 avec MVC6 [BETA2] pour répertorier un certain nombre d’étagères et le nombre de livres sur chaque étagère.

Le schéma de base de données est créé correctement avec les relations de table correctes. Je peux ajouter des étagères et des livres à la base de données, y compris les relations de clé étrangère (voir le code ci-dessous).

Lorsque je teste la page d'index devant afficher le nombre de livres sur chaque étagère, je ne reçois aucune donnée ni aucun nombre de livres. Dans l'entité Shelf , la propriété Books n'est pas renseignée avec les entités Book , le nombre est donc nul (voir le code ci-dessous).

Dans EF7, y a-t-il un endroit où je dois écrire du code pour remplir Shelf.Books ou cela devrait-il se produire automatiquement dans EF7?

BookShelf.cs

namespace MyApp.Models
{
    public class Shelf
    {
        public int ShelfId { get; set; }
        public string Name { get; set; }
        public virtual List<Books> Books { get; set; }
    }

    public class Book
    {
        public int BookId { get; set; }
        public string Name { get; set; }
        public int ShelfId { get; set; }
        public Shelf Shelf{ get; set; }
    }
}

ApplicationDbContext.cs

namespace MyApp
{
    public class ApplicationDBContext
    {
        public DbSet<Shelf> Shelf { get; set; }
        public DbSet<Book> Book { get; set; }
    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<Shelf>().Key(s => s.ShelfId);
        builder.Entity<Book>().Key(b => b.BookId);

        builder.Entity<Shelf>()                
            .OneToMany(s => s.Book)
            .ForeignKey(k => k.ShelfId);

        base.OnModelCreating(builder);
    }
}

ShelfController.cs

namespace MyApp
{
    private ApplicationDBContext db;

    public BuildingsController(ApplicationDBContext context)
    {
        db = context;
    }

    // GET: Shelves
    public async Task<IActionResult> Index()
    {
        return View(await db.Shelves.ToListAsync());
    }
}

Index.cshtml

...
@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Books.Count)
        </td>
    </tr>
}
....

Réponse populaire

Ce que j'ai découvert, c'est qu'EF ne remplit pas l'objet parent avec des objets enfants associés. Exemple, myShelf.Books sera vide jusqu'à ce qu'il soit renseigné dans la fonction d'action du contrôleur.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi