我的注册过程创建了一个新用户,询问新创建用户的 id 并将其用作带有附加信息的表中的键,如以下代码所示:
String confirmationToken = WebSecurity.CreateUserAndAccount(
model.Email,
model.Password,
null,
true
);
UsersContext usersContext = new UsersContext();
User user = usersContext.Users.First(e => e.Email == model.Email);
PersonalInformation personalInformation = new PersonalInformation() {
UserID = user.UserID,
FirstName = model.FirstName,
LastName = model.LastName
};
usersContext.PersonalInformation.Add(personalInformation);
usersContext.SaveChanges();
这在我的本地机器上运行良好,但是当我在 azure 上发布它时。它只是创建用户/帐户,但失败:无法将值 NULL 插入列 'UserID'、表 'optindb.dbo.PersonalInformation';
当我查看数据库时,我可以看到用户表充满了电子邮件,当然还有 id 作为主键。
所以我的猜测是,“usersContext.Users.First”返回null,但我不知道为什么......我是否必须对“WebSecurity.CreateUserAndAccount”做一些特别的事情,这样我才能确定它被保存到数据库中在我要身份证之前?
欢迎任何帮助。
编辑:
在阅读了这篇文章下面的评论后,我仔细查看并将“Users.First”值的值与注册邮件一起发送,发现它确实工作正常并且其中包含 ID 值。
所以真正的问题一定出在这部分:
PersonalInformation personalInformation = new PersonalInformation() {
UserID = user.UserID,
FirstName = model.FirstName,
LastName = model.LastName
};
usersContext.PersonalInformation.Add(personalInformation);
usersContext.SaveChanges();
这些值在personalInformation 对象中设置,但是在保存usersContext 时,它希望保存NULL 而不是存储在对象中的userID。无法理解这里发生了什么..