2014-11-24 42 views
1

我目前在學習ASP.NET MVC 5 EF 6的過程現在我堅持用聲明流暢API外鍵,然後播種數據申報表。 這裏是我的代碼:什麼是我在實現外鍵與EF 6的錯誤?

型號:

public class Person 
{ 
    public int Id { get; set; } 
    public ICollection<Anime> DirectedAnimes { get; set; } 
} 

public class Anime 
{ 
    public int Id { get; set; } 
    public int DirectorId { get; set; } 
    public Person Director { get; set; } 
} 


public class AnimeDbContext : DbContext 
{ 
    public DbSet<Person> Persons { get; set; } 
    public DbSet<Anime> Animes { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Anime>() 
      .HasRequired(a => a.Director) 
      .WithMany(p => p.DirectedAnimes) 
      .HasForeignKey(p => p.DirectorId); 
     base.OnModelCreating(modelBuilder); 
    } 
} 

播種數據:

public class AnimeInitializer : DropCreateDatabaseAlways<AnimeDbContext> 
{ 
    protected override void Seed(AnimeDbContext context) 
    { 
     var persons = new List<Person> 
     { 
      new Person { Id = 1 }, 
      new Person { Id = 2 } 
     }; 
     var animes = new List<Anime> 
     { 
      new Anime { DirectorId = 1 }, 
      new Anime { DirectorId = 2 } 
     }; 
     persons.ForEach(p => context.Persons.Add(p)); 
     context.SaveChanges(); 
     animes.ForEach(a => context.Animes.Add(a)); 
     context.SaveChanges(); 
    } 
} 

但是,當我取Anime對象,他們預計DirectorId值,但其Director性質是null

var director = (new AnimeDbContext()).Animes.First().Director; //null 
var directorId = (new AnimeDbContext()).Animes.First().DirectorId; //1 

實體框架知道,雖然外鍵,因爲在運行時錯誤的Seed方法結果添加new Anime {DirectorId = 3}

我敢肯定,我的錯誤是非常愚蠢的,由我不是下面的例子正是造成的,但我一直在這個問題了,而已經在努力,但還是無法弄明白。我非常感謝一些幫助。

回答

3

你的導航屬性不是虛擬並且因此不能由DynamicProxy覆蓋。

改變這樣的:

public class Person 
{ 
    public int Id { get; set; } 
    public virtual ICollection<Anime> DirectedAnimes { get; set; } 
} 

public class Anime 
{ 
    public int Id { get; set; } 
    public int DirectorId { get; set; } 
    public virtual Person Director { get; set; } 
} 
+0

謝謝,這是造成不確實下列exaples一個愚蠢的錯誤。虛擬添加幫助了我。 – AndreySarafanov 2014-11-24 11:52:17