Caricamento di riferimenti in EF7

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

Domanda

Sto avendo due classi: autore e 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; }
}

e

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; }
}

Utilizzando EF7 (beta4), li sto collegando nel seguente modo:

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);
            });
    }
}

Quando Db.Blogpost.First(x => x.Id == id) un Db.Blogpost.First(x => x.Id == id) richiamo l'oggetto Blogpost - tuttavia, la proprietà .Author è null. Inoltre, quando si recupera qualsiasi oggetto Autore, la collezione .Blogposts è vuota.

Comprendo che l'EF7 non ha ancora implementato il carico di caricamento e nemmeno il caricamento lento. Ma come potrei quindi recuperare / assegnare qualsiasi oggetto referenziato tramite chiave esterna?

Risposta accettata

EF 7 ha implementato il caricamento impaziente.

Usa .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

Per ulteriori informazioni su come lavorare con le raccolte, vedere la risposta a questa domanda: Come lavorare con le raccolte



Related

Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché