SQL Server 2016开发人员版,
.Net 4.5.2版
我遇到了一些问题
AddOrUpdate
扩展方法。
根据我对方法的理解,应该使用lambda表达式定义用于确定是否要更新或添加记录的唯一字段。但我的似乎忽略了这一点,每次都试图增加。本例使用的是标识类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文件。
// This method will be called after migrating to the latest version.
protected override void Seed(MyIdentityDbContext context)
{
UserSeeder.Seed(context);
base.Seed(context);
}
这是使用lambda调用和传入对象时出现的错误。我怀疑有一些配置我没有正确设置,因为这是上周的工作,当我检查git时,没有对DAL项目的任何文件进行任何更改。
此外,数据库是最新的,应用程序在运行时不会抛出任何数据访问错误,因此连接良好,模型处于同步状态。我们只是不能让seed方法像示例显示的那样工作。