获取最后插入的id,并用该id填充/插入到另一个表中

本文关键字:id 插入 另一个 填充 最后 获取 | 更新日期: 2023-09-27 18:08:52

最后一个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
        {
          // ...
        }
    }
}

获取最后插入的id,并用该id填充/插入到另一个表中

当你从UI获取UserData

public ActionResult Register(RegisterModel model)

您的模型将没有用户的Id,但它将在您在数据库中插入记录时创建。所以你的模型。UserId将为空。

你可以这样获取:

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);
如果用户记录插入成功,你应该得到结果。

这里的问题是您的UserId从未实际设置,因此

x.UserId == model.UserId

总是返回一个空结果。

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

一种更健壮的方法是使用您已经可用的信息简单地请求新创建的帐户的ID

var newUserId = WebSecurity.GetUserId(model.UserName);
var profile = db.UserProfiles.SingleOrDefault(x => x.UserId == newUserId);