EF 6.2, SQL Server 2016 Developer Edition, .Net 4.5.2
У меня возникают некоторые проблемы с методом расширения AddOrUpdate .Как я понимаю, метод должен определять с помощью лямбда-выражения уникальное поле, которое следует использовать для определения необходимости обновления или добавления записи.Но мой, кажется, игнорирует это и пытается добавлять каждый раз.В этом примере используется класс Identity AspNetRole, но такая же проблема возникает для всех объектов в контексте.
public class UserSeeder
{
public static void Seed(MyIdentityDbContext context)
{
HashSet<AspNetRole> roles = new HashSet<AspNetRole>();
AspNetRole systemAdmin = new AspNetRole() { Id = "269E684F-9542-4F6A-8029-7516AA2ECD61", Name = "System Admin" };
AspNetRole admin = new AspNetRole() { Id = "BE70FDF9-FCD5-4894-AE71-DA324A7D751E", Name = "Administrator" };
AspNetRole normalUser = new AspNetRole() { Id = "D9C66DC0-190F-463A-88B0-8E1E4ED96BAF", Name = "User" };
roles.Add(systemAdmin);
roles.Add(admin);
roles.Add(normalUser);
foreach (AspNetRole role in roles)
{
context.Roles.AddOrUpdate(r =>r.Id, role);
//context.Roles.AddOrUpdate(role);
//both throw same error
}
context.SaveChanges();
}
}
И в файле Configuration.cs, сгенерированном с помощью Enabling Migrations.
// This method will be called after migrating to the latest version.
protected override void Seed(MyIdentityDbContext context)
{
UserSeeder.Seed(context);
base.Seed(context);
}
Это ошибка, которую я получаю как для вызова с использованием лямбды, так и просто передачиобъект.У меня есть подозрение, что есть какая-то конфигурация, которую я не настраиваю правильно, потому что она работала на прошлой неделе, и когда я проверял git, не было внесено никаких изменений ни в один из файлов проекта DAL.
Нарушение ограничения PRIMARY KEY 'PK_dbo.AspNetRoles'.Невозможно вставить дубликат ключа в объект 'dbo.AspNetRoles'.Значение ключа-дубликата: (269E684F-9542-4F6A-8029-7516AA2ECD61).
Кроме того, база данных обновлена, и приложение не выдает никаких ошибок доступа к данным во время выполнения, поэтомусоединение в порядке, и модель синхронизирована.Мы просто не можем заставить метод seed работать так, как показывают примеры.