Asp.net核心標識“INSERT語句與FOREIGN KEY約束衝突”

asp.net-identity asp.net-mvc c# entity-framework-core seeding

我使用ASP.NET CORE Identity創建ASP.NET CORE應用程序。我創建了種子類,用於為第一個啟動應用程序保存新用戶和角色。在這個種子類中,當我向用戶添加角色時,我會收到以下錯誤。

INSERT語句與FOREIGN KEY約束“FK_AspNetUserRoles_AspNetUsers_UserId”衝突。衝突發生在數據庫“DB_A14695_Elvinm”,表“dbo.AspNetUsers”,列“Id”中。該語句已終止。

我使用以下類來識別身份

public class ApplicationUser : IdentityUser
{
    public int Type { get; set; }
    public int Flags { get; set; }
    public DateTime CreatedDate { get; set; }
    public DateTime LastModifiedDate { get; set; }
}

還有我的種子班

 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


}

我想說角色成功保存了數據庫。

請幫忙解決問題。

一般承認的答案

在錯誤發生之前檢查UserManager.CreateAsync調用的輸出。我猜你的用戶沒有被持久化,所以下一次調用失敗並出現FK問題。

如果您使用的是默認身份密碼要求(就像我在嘗試時那樣),您將從用戶創建調用中獲得密碼驗證錯誤結果。

在此處輸入圖像描述


熱門答案

我知道這個問題已得到解答,但我只需要為我的問題添加我的解決方案,希望能夠讓其他一些可憐的靈魂免於重複我的錯誤......

我的用戶已創建...

我只是沒有單擊SQL Server對象資源管理器上的“刷新”按鈕。

:(多麼尷尬。我花了一個小時+追踪這個。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因