2015-05-12 7 views
6

sto avendo due classi - autore e blogpost:Caricamento di riferimenti a EF7

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), io li sto collegando 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 accedo un blogpost Db.Blogpost.First(x => x.Id == id) ho recuperare l'oggetto blogpost - tuttavia, il .Author proprietà è nulla. Inoltre, quando si recupera qualsiasi oggetto Autore, è la raccolta .Blogposts vuota.

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

risposta

10

EF 7 ha implementato il caricamento ansioso.

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 collezioni, vedere la risposta a questa domanda: How to work with collections

+5

Nota per chiunque non è in grado di trovare la "include" il metodo: è necessario aggiungere 'using Microsoft.Data.Entity;' nella parte superiore del file. – gunr2171

+0

Lo spazio dei nomi è ora cambiato. È necessario aggiungere 'using Microsoft.EntityFrameworkCore' per Entity Framework Core 1.1.0. – Matt