我有一个复杂的用户类型(more info),它可能包含基于不同类型的不同信息。现在,当我想注册用户时,我想在其他数据库表中添加必要的信息。目前我正在尝试这样做:
public class NormalUser
{
[Key]
public string Id { get; set; }
//....
[Required]
public virtual User User { get; set; }
}
if (await Users.Create(user) && await Secrets.Create(new UserSecret(model.UserName, model.Password)) &&
await Logins.Add(new UserLogin(user.Id, IdentityConfig.LocalLoginProvider, model.UserName)))
{
var normaluser = new NormalUser(model) { User = user };
db.NormalUsers.Add(normaluser);
db.SaveChanges();
//....
然而,当我运行它时,我在最后一行得到2个错误。一个错误是,Id
的{{1}}字段应该是唯一的,另一个是normaluser
字段应该是唯一的。它们都是必需的标准,但我认为第一个是由User
字段的自动递增处理的,我没想到第二个因为我刚刚创建了Id
。
我是否通过使用此方法做正确的事情?
通过将User
字段的类型从Id
更改为string
来修复第一个
答案 0 :(得分:0)
好吧,找到了答案。首先,我必须将Id
字段的类型从string
更改为int
以启用自动增量。
第二,我错误地使用了新创建的User
对象。我不得不从数据库中加载信息:
var newUser = db.Users.Where(u => u.UserName == user.UserName).FirstOrDefault();
var normaluser = new NormalUser(model) { User = newUser };