Carga de referencias en EF7

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

Pregunta

Estoy teniendo dos clases - autor y 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; }
}

y

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

Usando EF7 (beta4), los estoy conectando de la siguiente manera:

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

Cuando Db.Blogpost.First(x => x.Id == id) un blogpost Db.Blogpost.First(x => x.Id == id) recupero el objeto Blogpost, sin embargo, la propiedad .Author es nula. Además, cuando se recupera cualquier objeto de Autor, su colección .Blogposts está vacía.

Tengo entendido que el EF7 no ha implementado la carga impaciente ni la carga perezosa todavía. Pero, ¿cómo puedo recuperar / asignar objetos a los que se hace referencia a través de una clave externa?

Respuesta aceptada

EF 7 ha implementado la carga impaciente.

Uso .Incluir

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

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

Para obtener más información sobre cómo trabajar con colecciones, consulte la respuesta a esta pregunta: Cómo trabajar con colecciones



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué