Код: Выделить всё
public async Task Seed()
{
dbContext.Database.Migrate();
string dbName = dbContext.Database.GetDbConnection().Database;
if (!dbName.EndsWith("_Tests"))
{
var tableNames = dbContext.Model.GetEntityTypes()
.Select(t => t.GetTableName())
.Distinct()
.ToList();
tableNames.ForEach(tableName =>
{
dbContext.Database.ExecuteSqlRaw($"ALTER TABLE {tableName} NOCHECK CONSTRAINT ALL;");
});
tableNames.ForEach(tableName =>
{
dbContext.Database.ExecuteSqlRaw($"DELETE FROM {tableName};");
dbContext.Database.ExecuteSqlRaw(
$"IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID('{tableName}') AND is_identity = 1) " +
$"BEGIN DBCC CHECKIDENT ('{tableName}', RESEED, 0); END");
});
tableNames.ForEach(tableName =>
{
dbContext.Database.ExecuteSqlRaw($"ALTER TABLE {tableName} CHECK CONSTRAINT ALL;");
});
//Seed/insert data
await SeedTable1();
await SeedTable2(); // Depends on 1 for FK
await SeedTable3(); // Depends on 1 and 2 for FK
}
}
Код: Выделить всё
dbContext.Database.ExecuteSqlRaw(
$"IF EXISTS (SELECT 1 FROM sys.columns WHERE object_id = OBJECT_ID('{tableName}') AND is_identity = 1) " +
$"BEGIN DBCC CHECKIDENT ('{tableName}', RESEED, 0); END");
Однако из-за этой строки я получаю ошибки в моих функциях заполнения SeedTable2/3 любой, у которой есть внешние ключи.
Выдает следующую ошибку:
значение «CustomOptionMachineCategory (Dictionary).AllowedOptionsId» неизвестно при попытке сохранить изменения. Это связано с тем, что свойство также является частью внешнего ключа, для которого основная сущность в связи неизвестна.
Это ограничение FK, поэтому Я попытался добавить следующее после вставки данных/заполнения.
Код: Выделить всё
tableNames.ForEach(tableName =>
{
dbContext.Database.ExecuteSqlRaw($"ALTER TABLE {tableName} CHECK CONSTRAINT ALL;");
});
Я должен отметить одну вещь: эта ошибка возникает только тогда, когда база данных только что удалена и запускается. первый раз. После этого ошибок больше не возникает.
Это очень странно.
Удалите БД.
Удалите строку Database.Migrate, чтобы она не мигрировала
Запустите миграцию вручную с помощью команды
Ошибка
Начать заново
Работает
ИЛИ
Удалите БД.
/>RUN
Ошибка
Начать заново
Работает
Поэтому я не знаю, думаю, это связано с начальным состоянием базы данных, которое не любит сброс личности
Похоже, что каждый раз, когда выполняется ОЖИДАЮЩАЯ миграция, у которой есть соответствующее начальное значение с fk, либо вручную, либо через базу данных. При миграции возникает ошибка.
Что я могу сделать, чтобы это исправить?
Подробнее здесь: https://stackoverflow.com/questions/791 ... -exception
Мобильная версия