Я использую настройку EF5 на основе Code-First DBContext.
В 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++;
}
Я попытался использовать /omit Id
, а также использовать свойство Id
/Slug
как селектор обновлений.
когда выполняется Update-Database
, поле Id
игнорируется, и значение автоматически генерируется SQL Server, а БД заполняется дубликатами; Селектор Slug
позволяет дублировать и на последующих запусках создает исключения (Sequence contains more than one element
).
Метод AddOrUpdate
предназначен для работы таким образом? Должен ли я выполнить upsert вручную?