首次創建數據庫並運行Seed
方法正常工作。當數據已經在數據庫中時,它會在第二次運行時拋出錯誤。當數據已經在數據庫中時,EF種子不工作
我還注意到,當我將屬性分配給實體時,其PropertyId
未更新並保留爲空。
這是我的代碼。
protected override void Seed(StreetStats.Data.StreetStatsDbContext context)
{
if (System.Diagnostics.Debugger.IsAttached == false)
System.Diagnostics.Debugger.Launch();
using (context.Database.BeginTransaction())
{
try
{
Worker worker = new Worker()
{
Name = "Worker 1",
};
context.Workers.AddOrUpdate(w => w.Name, worker);
context.SaveChanges(); //Worker gets Id assigned to the existing worker with the same name in DB
Job job = new Job()
{
Name = "Job 1",
Worker = worker
};
context.Jobs.AddOrUpdate(j => j.Name, job);
context.SaveChanges(); //WorkerId is null for some reason
MonitoringTask monitoringTask = new MonitoringTask
{
Job = job,
Name = "Task 1"
};
context.MonitoringTasks.AddOrUpdate(mt => mt.Name, monitoringTask);
context.SaveChanges(); //Throws exception
Area area = new Area
{
MonitoringTask = monitoringTask,
Name = "Area 1"
};
context.Areas.AddOrUpdate(a => a.Name, area);
context.SaveChanges();
context.Database.CurrentTransaction.Commit();
}
catch (Exception)
{
context.Database.CurrentTransaction.Rollback();
throw;
}
}
}
這是第三次的SaveChanges異常消息:
UPDATE語句衝突與外鍵約束 「FK_dbo.MonitoringTasks_dbo.Jobs_JobId」。衝突發生在數據庫「StreetStats」,表「dbo.Jobs」,列'Id'中。
每FK關係看起來像
Worker Worker { get; set; }
Int64 WorkerId { get; set; }
謝謝。這固定了它。我想我會寫我自己的AddOrUpdate擴展方法。 他們在測試中錯過了什麼?這是我第一次遇到EF,並且在使用它的前10分鐘裏找到了。 – Hooch