从另一个控制器创建模型

时间:2013-08-23 08:25:49

标签: asp.net asp.net-mvc asp.net-mvc-scaffolding asp.net-mvc-5

我有一个复杂的用户类型(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来修复第一个

1 个答案:

答案 0 :(得分:0)

好吧,找到了答案。首先,我必须将Id字段的类型从string更改为int以启用自动增量。

第二,我错误地使用了新创建的User对象。我不得不从数据库中加载信息:

var newUser = db.Users.Where(u => u.UserName == user.UserName).FirstOrDefault();
var normaluser = new NormalUser(model) { User = newUser };