Asp.netコアID "FOREIGN KEY制約と競合するINSERTステートメント"

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問題で失敗するように持続されないと推測しています。

デフォルトアイデンティティのパスワード要件(私が試したときのようなもの)を使用している場合は、ユーザー作成呼び出しからパスワード検証エラーの結果が得られます。

ここに画像の説明を入力


人気のある回答

私はこれが答えられたことを知っています、しかし私は私が私の過ちを繰り返すことから他の貧しい魂を救うことができることを期待して私の問題に私の解決策を追加しなければなりませんでした.....

私のユーザーWASが作成しました...

SQL Serverオブジェクトエクスプローラの[更新]ボタンをクリックしていませんでした。

:(なんて恥ずかしい。これを追跡するのに1時間を費やした。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ