Chargement des références dans EF7

asp.net-core-mvc entity-framework-core

Question

J'ai deux cours - auteur et blogpost:

public class Author
{
    public Author()
    {
        Blogposts = new HashSet<Blogpost>();
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Blogpost> Blogposts { get; set; }
}

et

public class Blogpost
{
    public Blogpost()
    {
    }

    // Properties
    public int Id { get; set; }
    public string Text { get; set; }

    public int AuthorId { get; set; }

    public Author Author { get; set; }
}

En utilisant EF7 (beta4), je les connecte de la manière suivante:

public partial class MyDbContext : DbContext
{
    public virtual DbSet<Author> Author { get; set; }
    public virtual DbSet<Blogpost> Blogpost { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Author>(entity =>
            {
                entity.Property(e => e.Id)
                    .ForSqlServer().UseIdentity();
            });

            modelBuilder.Entity<Blogpost>(entity =>
            {
                entity.Property(e => e.Id)
                    .ForSqlServer().UseIdentity();
            });

            modelBuilder.Entity<Blogpost>(entity =>
            {
                entity.Reference<Author>(d => d.Author).InverseCollection(p => p.Blogposts).ForeignKey(d => d.AuthorId);
            });
    }
}

Lorsque Db.Blogpost.First(x => x.Id == id) un blogpost Db.Blogpost.First(x => x.Id == id) je récupère l'objet Blogpost. Toutefois, la propriété .Author est null. En outre, lors de la récupération d'un objet Author, sa collection .Blogposts est vide.

Je comprends que le EF7 n’a pas encore implémenté le chargement rapide ni le chargement paresseux. Mais comment puis-je récupérer / affecter des objets référencés via une clé étrangère?

Réponse acceptée

EF 7 a implémenté un chargement rapide.

Utilisez .Include

var post = context.Blogpost.First(); // post.Author will be null

var post = context.Blogpost.Include(b => b.Author).First(); // post.Author will be loaded

Pour plus d'informations sur l'utilisation des collections, reportez-vous à la réponse à cette question: Comment travailler avec des collections




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