ASP.NET ID を既存の (複雑な) データベース モデルにマップするカスタム UserStore を実装しようとしています。データベースには、ユーザー データの保存に使用する既存のテーブル 'Contact' があります。そのテーブルには int identity(1,1) 主キーがあります。そこで、IUser を実装する「ContactUser」という名前のクラスと、IUserStore を実装する「ContactUserStore」というクラスを作成しました。基本的なログインが機能するようになりました。
ただし、新規ユーザー登録が機能しません。私がやろうとすると:
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
userId が見つからないというエラーが表示されます。
これは、AspNet Identity が ContactUserStore.CreateAsync(ContactUser user) を呼び出したときにデータベースに作成された Contact レコードの ID キーを認識していないことが原因です。そのメソッドは正常に完了しますが (連絡先レコードの作成)、作成したばかりのユーザーではない userId = 0 で ContactUserStore.FindByIdAsync(int userId) を呼び出します...
CreateAsync() でデータベースに作成された userId の @@identity 値を返す方法はありますか? または、作成後に FindByName() または FindByEmail() メソッドを使用してユーザーを選択するように強制しますか?