最后一个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
{
// ...
}
}
}
答案 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,例如如果有人在您查询数据库之前创建了一个新帐户会怎么样?
更强大的方法是使用您已有的信息
简单地请求新创建的帐户的IDvar newUserId = WebSecurity.GetUserId(model.UserName);
var profile = db.UserProfiles.SingleOrDefault(x => x.UserId == newUserId);