我正在使用基于代码优先 DBContext 的 EF5 设置。
在DbMigrationsConfiguration.Seed
我试图用默认的虚拟数据填充数据库。为了完成这个任务,我使用DbSet.AddOrUpdate
方法。
最简单的代码来说明我的目标:
j = 0;
var cities = new[]
{
"Berlin",
"Vienna",
"London",
"Bristol",
"Rome",
"Stockholm",
"Oslo",
"Helsinki",
"Amsterdam",
"Dublin"
};
var cityObjects = new City[cities.Length];
foreach (string c in cities)
{
int id = r.NextDouble() > 0.5 ? 0 : 1;
var city = new City
{
Id = j,
Name = c,
Slug = c.ToLowerInvariant(),
Region = regions[id],
RegionId = regions[id].Id,
Reviewed = true
};
context.CitySet.AddOrUpdate(cc => cc.Id, city);
cityObjects[j] = city;
j++;
}
我尝试使用/省略Id
字段以及使用Id
/Slug
属性作为更新选择器。
Update-Database
运行时,Id
字段被忽略,值由 SQL Server 自动生成,DB 填充重复项;Slug
选择器允许重复,并且在随后的运行中会产生异常 ( Sequence contains more than one element
)。
方法是否AddOrUpdate
打算以这种方式工作?我应该手动执行 upsert 吗?