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