获取最后插入的id并填充/插入具有该id的另一个表

时间:2014-06-17 09:55:48

标签: c# entity-framework model-view-controller

最后一个id结果返回null,如何获取最后插入的id并填充/插入另一个具有该id的表

第二个表有两列主键和第一个表中userid的列。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
    UsersContext db = new UsersContext();
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        try
        {
            WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email }, false);
            WebSecurity.Login(model.UserName, model.Password);

            UserProfile obj = db.UserProfiles.Last(x => x.UserId == model.UserId);                    
            db.Profiles.Add(new Profile { UserID = obj });
            db.SaveChanges();
        }
        catch
        {
          // ...
        }
    }
}

2 个答案:

答案 0 :(得分:0)

从UI获取UserData时

public ActionResult Register(RegisterModel model)

您的模型将不具有用户ID,但是当您在数据库中插入记录时,它将被创建。所以你的model.UserId将为null。

你可以这样:

UserProfile lastUser = db.UserProfiles.OrderByDescending(x => x.UserId).FirstOrDefault();                  
            db.Profiles.Add(new Profile { UserID = lastUser.UserId });
            db.SaveChanges();

您也可以使用Max功能获取它:

var lastUserId = db.UserProfiles.Max(u => u.UserId);

但是如果用户记录已经插入,你应该得到结果。

答案 1 :(得分:0)

这里的问题是你的UserId实际上从未实际设置

x.UserId == model.UserId

将始终返回空结果。

简单地“拉下最新的”通常不是一个好主意,因为你可能最终得到错误的ID,例如如果有人在您查询数据库之前创建了一个新帐户会怎么样?

更强大的方法是使用您已有的信息

简单地请求新创建的帐户的ID
var newUserId = WebSecurity.GetUserId(model.UserName);
var profile = db.UserProfiles.SingleOrDefault(x => x.UserId == newUserId);