Code-First DBContext ベースの EF5 セットアップを使用しています。
DBに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
このように動作することを意図していますか? アップサートを手動で実行する必要がありますか?