在Entity Framework中获取最后添加的记录ID

8 c# asp.net-mvc entity-framework

我正在我的数据库中注册一个新客户端,当该操作完成时,我想显示该新客户端的详细视图.问题是我找不到发送到最近添加的客户端的Detailsaction方法的方法ID.

我正在研究这段代码:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(ClientModel credential)
{
    if(ModelState.IsValid)
    {
        database.Clients.Add(credential);
        database.SaveChanges();

        return RedirectToAction("Details", //Here is my problem, because sending credential.ID gives me an error as far as credential doesn't have an ID due it's not a database record.;
    }
    else
    {
        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是mi ClientModel:

[Table("Clients")]
public class ClientModel
{
    [Key]
    public Int16 ID { get; set; }

    [Required]
    public String Name { get; set; }

    public String Address { get; set; }

    [EmailAddress]
    public String EmailAddress { get; set; }

    [Phone]
    public String Phone { get; set; }

    public virtual ICollection<UserModel> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

有人能为我的道路带来光明吗?

编辑:

得到了答案,我想讨论一下:

return RedirectToAction("Details", new { ID = credential.ID });
Run Code Online (Sandbox Code Playgroud)

这个解决方案有效,但现在问题可能是,这是更好的解决方案,还是应该使用@ Basic的答案中的2个类?

Bri*_*ins 8

当您致电SaveChanges()credential.ID,如果数据库中的自动编号和EF模型中的设置应该填充.您可以尝试重新加载Entity Framework 4.1 DbSet Reload中提到的元素.

在上面的场景中,您要添加一个新客户端,因此您需要将客户端模型转换为客户端,如:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(ClientModel credential)
{
    var client = new Client
    {
       Name = model.Name,
       EmailAddress = model.EmailAddress,
       .
       .
    };

    db.Clients.Add(client);
    db.SaveChanges();

    model.ID = client.ID;

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

然后ID将与模型一起返回.


归档时间:

查看次数:

18278 次

最近记录:

11 年,7 月 前