私はAsp.net Core Identityを使用している小さなテストアプリケーションを持っています。私は特定のシステムの役割が整っていることを確認し、スタートアップで :それが存在しない場合はAddToRoleAsyncはロールを見つけることができません
if(await _roleManager.FindByNameAsync(“SYSADMIN”) == null)
{
_context.Roles.Add(new IdentityRole(“SYSADMIN”));
await _context.SaveChangesAsync();
}
それから私はチェックして、システム管理者アカウントを作成します。
var result = await _userManager.CreateAsync(adminUser, config["AdminPassword"]);
私は、それを試してみて追加SYSADMINロールへのユーザー:
if (result == IdentityResult.Success)
{
await _userManager.AddToRoleAsync(adminUser, “SYSADMIN”);
}
ただし、ロールが存在しないというエラーが表示されます。しかし、私はAspNetRoles
に上記の名前の役割を見ることができますし、私は2回目にアプリケーションを実行すると_roleManager.FindByNameAsync
がロールを返すので、_context.Roles.Add()
セクションには入りません。
誰もこの動作を以前に見たことがありますか、それが失敗する理由は何ですか?
編集 私は、正規化された名前がDBにもかかわらずnullであることに気づきました。
私は、あなたが矛盾しているように見えて、ロール名をあらかじめ正規化しようとしています。 IDPPlatform.System.Roles.OrgAdminがSYSADMINに正規化される文字列定数であれば、どこでも定数を使用するだけです。 _roleManager.FindByNameAsyncのようなメソッドはメソッド内で正規化しますので、事前に正規化する必要はありません。 _userManager.AddToRoleAsyncと同じ –
残念ですが、コピー/貼り付けエラーです。これは "SYSADMIN"に解決され、定数は実際にどこでも使用されています。この例では、SQL Serverの名前列に配置される文字列であることを示すために置き換えられました。私は、正規化された名前がDBにもかかわらずヌルであることに気付いています - これは一致するために使用されているものですか? – LDJ