0

我的注册过程创建了一个新用户,询问新创建用户的 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。无法理解这里发生了什么..

4

0 回答 0