我正在尝试实现一个自定义 UserStore,它将 ASP.NET Identity 映射到现有的(而且相当复杂的)数据库模型。数据库有一个现有的表“联系人”,我想用它来存储用户数据。该表有一个 int identity(1,1) 主键。所以我创建了一个名为“ContactUser”的类来实现 IUser 和一个“ContactUserStore”来实现 IUserStore。基本登录现在有效。
但是,我无法让新用户注册工作。当我尝试这样做时:
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
它会因为找不到用户 ID 的错误而轰炸。
这是因为 AspNet Identity 在调用 ContactUserStore.CreateAsync(ContactUser user) 时不知道在数据库中创建的联系人记录的身份密钥。该方法成功完成(创建联系人记录),但随后它使用 userId = 0 调用 ContactUserStore.FindByIdAsync(int userId),这不是它刚刚创建的用户...
有没有办法传回在 CreateAsync() 中在数据库中创建的 userId 的 @@identity 值?还是强制它在创建后使用 FindByName() 或 FindByEmail() 方法来选择用户?