我正在为拥有球员的足球队创建一个数据库。我使用种子方法添加我的数据,但实体框架不会更新我的数据库,抛出对象引用未设置为对象的实例。错误。
我不确定如何链接种子方法中的关系。下面是代码。
种子方法
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; }
}
编辑:标记为答案的问题是您在键入我的常规错误消息时在Google中获得的第一个结果。
答案 0 :(得分: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 }
);
}
确保自动迁移设置为true(如上所述)。
Speler实体:
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实体:
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);
}