2016-05-12 2 views
1

Я создаю базу данных с футбольными командами, в которых есть игроки. Я использую метод seed для добавления моих данных, но инфраструктура Entity не будет обновлять мою базу данных, бросая ссылку на объект , не установленную в экземпляр объекта. ошибка.Метод семян не может добавить внешний ключевой объект

Я не уверен, как связать отношения в методе семян. Ниже приведен код.


Seed Метод

protected override void Seed(DataLayer.FootballContext context) 
{ 
     List<VoetbalPloeg> VoetbalPloegModels = new List<VoetbalPloeg>(); 

     VoetbalPloegModels.Add(new VoetbalPloeg() 
     { 
      PloegNaam = "FC Barcelona", 
      StamNummer = 1241, 
      Spelers = 
      { 
       new Speler() { VoorNaam = "Lionel", AchterNaam = "Messi", Assists = 2, Goals = 15, GeboorteDatum = new DateTime(1990, 05, 15), Positie = "Spits", Rugnummer = 10}, 
       new Speler() { VoorNaam = "Alonso", AchterNaam = "Xabi", Assists = 3, Goals = 7, GeboorteDatum = new DateTime(1985, 04, 24), Positie = "Centraal", Rugnummer = 13} 
      } 
     }); 

     VoetbalPloegModels.Add(new VoetbalPloeg() 
     { 
      PloegNaam = "Real Madrid", 
      StamNummer = 1546, 
      Spelers = 
      { 
       new Speler() { VoorNaam = "Cristano", AchterNaam = "Ronaldo", Assists = 0, Goals = 17, GeboorteDatum = new DateTime(1989, 10, 7), Positie = "Spits", Rugnummer = 7}, 
       new Speler() { VoorNaam = "Sergio", AchterNaam = "Ramos", Assists = 0, Goals = 4, GeboorteDatum = new DateTime(1986, 12, 04), Positie = "LaatsteMan", Rugnummer = 10} 
      } 
     }); 

     foreach (var item in VoetbalPloegModels) 
      context.VoetbalPloeg.Add(item); 

     base.Seed(context); 
} 

игрока Модель

public class Speler 
{ 
    [Key] 
    public int SpelerId { get; set; } 
    public string VoorNaam { get; set; } 
    public string AchterNaam { get; set; } 
    public int Rugnummer { get; set; } 
    public string Positie { get; set; } 
    public int Goals { get; set; } 
    public int Assists { get; set; } 
    public DateTime GeboorteDatum { get; set; } 

    // Forgein Key 
    // public int VoetbalPloegId { get; set; } 

    // Navigation Property 
    //public virtual VoetbalPloeg VoetbalPloeg { get; set; } 

} 

футбольной команды Модель

public class VoetbalPloeg 
{ 
    [Key] 
    public int VoetbalPloegId { get; set; } 
    public string PloegNaam { get; set; } 
    public int StamNummer { get; set; } 

    public virtual ICollection<Speler> Spelers { get; set; } 
} 

EDIT: вопрос помечается как ответ первый результат вы получите в Google когда вы вводите мой общее сообщение об ошибке.

+0

Какая линия бросает исключение? –

+0

none Я использую update-database в консоли pm –

+0

Возможный дубликат [Нулевая ссылка на миграцию платформы Entity Framework] (http://stackoverflow.com/questions/9481784/null-reference-onity-framework-migration) – Gusman

ответ

1

Если вы работаете семя от вашего Configuration.cs в переселении использования папки:

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
} 

protected override void Seed(TestContext context) 
    { 
     // Where 'VoetbalPloegs' is the name of your table in the dbcontext 

     context.Spelers.AddOrUpdate(x => x.Id, 
      new Speler() { Id = 1, VoorNaam = "Lionel", AchterNaam = "Messi", Assists = 2, Goals = 15, GeboorteDatum = new DateTime(1990, 05, 15), Positie = "Spits", Rugnummer = 10, VoetbalPloegId = 1 }, 
      new Speler() { Id = 2, VoorNaam = "Alonso", AchterNaam = "Xabi", Assists = 3, Goals = 7, GeboorteDatum = new DateTime(1985, 04, 24), Positie = "Centraal", Rugnummer = 13, VoetbalPloegId = 1}, 
      new Speler() { Id = 3, VoorNaam = "Cristano", AchterNaam = "Ronaldo", Assists = 0, Goals = 17, GeboorteDatum = new DateTime(1989, 10, 7), Positie = "Spits", Rugnummer = 7, VoetbalPloegId = 2 }, 
      new Speler() { Id = 4, VoorNaam = "Sergio", AchterNaam = "Ramos", Assists = 0, Goals = 4, GeboorteDatum = new DateTime(1986, 12, 04), Positie = "LaatsteMan", Rugnummer = 10, VoetbalPloegId = 2} 
      ); 

     context.VoetbalPloegs.AddOrUpdate(x => x.Id, 
      new VoetbalPloeg() { Id = 1, PloegNaam = "FC Barcelona", StamNummer = 1241 }, 
      new VoetbalPloeg() { Id = 2, PloegNaam = "Real Madrid", StamNummer = 1546 } 
      ); 
    } 

Убедитесь, что автоматические миграции значение ИСТИНА (как описано выше).

Entity плеер:

public class Speler 
{ 
    public int Id { get; set; } 
    public string VoorNaam { get; set; } 
    public string AchterNaam { get; set; } 
    public int Rugnummer { get; set; } 
    public string Positie { get; set; } 
    public int Goals { get; set; } 
    public int Assists { get; set; } 
    public DateTime GeboorteDatum { get; set; } 

    // Forgein Key 
    public int VoetbalPloegId { get; set; } 
} 

VoetbalPloeg Entity:

public class VoetbalPloeg 
{ 
    public int Id { get; set; } 
    public string PloegNaam { get; set; } 
    public int StamNummer { get; set; } 

    public virtual ICollection<Speler> Spelers { get; set; } 
} 

В DbContext Добавить:

public DbSet<Speler> Spelers { get; set; } 
    public DbSet<VoetbalPloeg> VoetbalPloegs { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<VoetbalPloeg>().HasMany(s => s.Spelers).WithRequired().HasForeignKey(h => h.VoetbalPloegId); 

    } 
+0

Все еще получите сообщение об ошибке, возможно, проблема связана с тем, как я связываю свое отношение в своей модели? –

+0

работает, но теперь у меня нет связи между игроками и командой –

+0

@Mercenary_Frank Добавить новую навигационную функцию public virtual VoetbalPloeg VoetbalPloeg {get; set;} в класс Speler. – yyou

Смежные вопросы