Asp.net 核心身份 "The INSERT statement conflicted with the FOREIGN KEY constraint "
Asp.net core Identity "The INSERT statement conflicted with the FOREIGN KEY constraint "
我使用 ASP.NET CORE Identity 创建 ASP.NET CORE 应用程序。
我创建了种子 class 来为首次启动应用程序保存新用户和角色。在这个种子 class 中,当我向用户添加角色时出现以下错误。
The INSERT statement conflicted with the FOREIGN KEY constraint
"FK_AspNetUserRoles_AspNetUsers_UserId". The conflict occurred in
database "DB_A14695_Elvinm", table "dbo.AspNetUsers", column 'Id'. The
statement has been terminated.
我使用以下 class 作为身份
public class ApplicationUser : IdentityUser
{
public int Type { get; set; }
public int Flags { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastModifiedDate { get; set; }
}
还有我的种子class
public class DbSeeder
{
#region Private Members
private RvMusicalDbContext DbContext;
private RoleManager<IdentityRole> RoleManager;
private UserManager<ApplicationUser> UserManager;
#endregion Private Members
#region Constructor
public DbSeeder(RvMusicalDbContext dbContext, RoleManager<IdentityRole> roleManager, UserManager<ApplicationUser> userManager)
{
DbContext = dbContext;
RoleManager = roleManager;
UserManager = userManager;
}
#endregion Constructor
#region Public Methods
public async Task SeedAsync()
{
// Create the Db if it doesn’t exist
DbContext.Database.EnsureCreated();
// Create default Users
if (await DbContext.Users.CountAsync() == 0) await CreateUsersAsync();
}
#endregion Public Methods
#region Seed Methods
private async Task CreateUsersAsync()
{
// local variables
DateTime createdDate = new DateTime(2016, 03, 01, 12, 30, 00);
DateTime lastModifiedDate = DateTime.Now;
string role_Administrators = "Administrators";
string role_Registered = "Registered";
//Create Roles (if they doesn't exist yet)
if (!await RoleManager.RoleExistsAsync(role_Administrators)) await RoleManager.CreateAsync(new IdentityRole(role_Administrators));
if (!await RoleManager.RoleExistsAsync(role_Registered)) await RoleManager.CreateAsync(new IdentityRole(role_Registered));
// Create the "Admin" ApplicationUser account (if it doesn't exist already)
var user_Admin = new ApplicationUser()
{
UserName = "Admin",
Email = "admin@opengamelist.com",
CreatedDate = createdDate,
LastModifiedDate = lastModifiedDate,
Flags = 0,
Type = 0
};
// Insert "Admin" into the Database and also assign the "Administrator" role to him.
if (await UserManager.FindByIdAsync(user_Admin.Id) == null)
{
await UserManager.CreateAsync(user_Admin, "Pass4Admin");
/// ERROR OCCURED HERE
await UserManager.AddToRoleAsync(user_Admin, role_Administrators);
// Remove Lockout and E-Mail confirmation.
user_Admin.EmailConfirmed = true;
user_Admin.LockoutEnabled = false;
}
#endregion Seed Methods
}
我想说角色保存数据库成功。
请帮忙解决问题
您是否应该确保用户管理员有一个 ID
if (await UserManager.FindByIdAsync(user_Admin.Id) == null)
应该是
if (await UserManager.FindByIdAsync(user_Admin.Id) != null)
在错误之前检查 UserManager.CreateAsync 调用的输出。我猜你的用户没有得到坚持,所以下一次调用因 FK 问题而失败。
如果您使用默认身份密码要求(就像我尝试时那样),您会从用户创建调用中收到密码验证错误结果。
我知道有人回答了这个问题,但我只需要将我的解决方案添加到我的问题中,希望我能拯救其他可怜的人免于重复我的错误......
我的用户已创建...
我只是没有单击 SQL 服务器对象资源管理器上的 'refresh' 按钮。
:( 真尴尬。我花了一个多小时来追踪它。
编辑: 我看到我投了反对票。我遇到了与提问者相同的问题,我的解决方案是页面需要刷新。虽然这是一个愚蠢的错误,但通常可以安全地假设,当您犯错时,您不是唯一的错误。在用户没有刷新页面的所有情况下,我的答案都是正确的,我认为这是一个不错的答案。
我遇到了同样的问题。这就是解决方案;转到 DBContext 并删除继承的 class.
中的用户
之前:
public class MyDBContext : IdentityDbContext<MyUser>
{ }
之后:
public class MyDBContext : IdentityDbContext
{ }
我使用 ASP.NET CORE Identity 创建 ASP.NET CORE 应用程序。 我创建了种子 class 来为首次启动应用程序保存新用户和角色。在这个种子 class 中,当我向用户添加角色时出现以下错误。
The INSERT statement conflicted with the FOREIGN KEY constraint "FK_AspNetUserRoles_AspNetUsers_UserId". The conflict occurred in database "DB_A14695_Elvinm", table "dbo.AspNetUsers", column 'Id'. The statement has been terminated.
我使用以下 class 作为身份
public class ApplicationUser : IdentityUser
{
public int Type { get; set; }
public int Flags { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime LastModifiedDate { get; set; }
}
还有我的种子class
public class DbSeeder
{
#region Private Members
private RvMusicalDbContext DbContext;
private RoleManager<IdentityRole> RoleManager;
private UserManager<ApplicationUser> UserManager;
#endregion Private Members
#region Constructor
public DbSeeder(RvMusicalDbContext dbContext, RoleManager<IdentityRole> roleManager, UserManager<ApplicationUser> userManager)
{
DbContext = dbContext;
RoleManager = roleManager;
UserManager = userManager;
}
#endregion Constructor
#region Public Methods
public async Task SeedAsync()
{
// Create the Db if it doesn’t exist
DbContext.Database.EnsureCreated();
// Create default Users
if (await DbContext.Users.CountAsync() == 0) await CreateUsersAsync();
}
#endregion Public Methods
#region Seed Methods
private async Task CreateUsersAsync()
{
// local variables
DateTime createdDate = new DateTime(2016, 03, 01, 12, 30, 00);
DateTime lastModifiedDate = DateTime.Now;
string role_Administrators = "Administrators";
string role_Registered = "Registered";
//Create Roles (if they doesn't exist yet)
if (!await RoleManager.RoleExistsAsync(role_Administrators)) await RoleManager.CreateAsync(new IdentityRole(role_Administrators));
if (!await RoleManager.RoleExistsAsync(role_Registered)) await RoleManager.CreateAsync(new IdentityRole(role_Registered));
// Create the "Admin" ApplicationUser account (if it doesn't exist already)
var user_Admin = new ApplicationUser()
{
UserName = "Admin",
Email = "admin@opengamelist.com",
CreatedDate = createdDate,
LastModifiedDate = lastModifiedDate,
Flags = 0,
Type = 0
};
// Insert "Admin" into the Database and also assign the "Administrator" role to him.
if (await UserManager.FindByIdAsync(user_Admin.Id) == null)
{
await UserManager.CreateAsync(user_Admin, "Pass4Admin");
/// ERROR OCCURED HERE
await UserManager.AddToRoleAsync(user_Admin, role_Administrators);
// Remove Lockout and E-Mail confirmation.
user_Admin.EmailConfirmed = true;
user_Admin.LockoutEnabled = false;
}
#endregion Seed Methods
}
我想说角色保存数据库成功。
请帮忙解决问题
您是否应该确保用户管理员有一个 ID
if (await UserManager.FindByIdAsync(user_Admin.Id) == null)
应该是
if (await UserManager.FindByIdAsync(user_Admin.Id) != null)
在错误之前检查 UserManager.CreateAsync 调用的输出。我猜你的用户没有得到坚持,所以下一次调用因 FK 问题而失败。
如果您使用默认身份密码要求(就像我尝试时那样),您会从用户创建调用中收到密码验证错误结果。
我知道有人回答了这个问题,但我只需要将我的解决方案添加到我的问题中,希望我能拯救其他可怜的人免于重复我的错误......
我的用户已创建...
我只是没有单击 SQL 服务器对象资源管理器上的 'refresh' 按钮。
:( 真尴尬。我花了一个多小时来追踪它。
编辑: 我看到我投了反对票。我遇到了与提问者相同的问题,我的解决方案是页面需要刷新。虽然这是一个愚蠢的错误,但通常可以安全地假设,当您犯错时,您不是唯一的错误。在用户没有刷新页面的所有情况下,我的答案都是正确的,我认为这是一个不错的答案。
我遇到了同样的问题。这就是解决方案;转到 DBContext 并删除继承的 class.
中的用户之前:
public class MyDBContext : IdentityDbContext<MyUser>
{ }
之后:
public class MyDBContext : IdentityDbContext
{ }