获取最近插入的ID并发送到另一个控制器视图

时间:2016-06-26 10:28:46

标签: asp.net-mvc asp.net-mvc-4 entity-framework-6

编辑: 我为每个模态创建了CRUD函数,现在我尝试获取最近的Inserted Id并在不同的视图中使用它。 这是我到目前为止所尝试的内容

我为每个ContextEntities数据库创建了两个用于CRUD函数的类(基于层),以实现纯OOP递归方法,以下是代码。

1。访问层

ViolatorDB

public class ViolatorDB
{
    private TPCAEntities db;
    public ViolatorDB()
    {
        db = new TPCAEntities();
    }
    public IEnumerable<tbl_Violator> GetALL()
    {
        return db.tbl_Violator.ToList();
    }
    public tbl_Violator GetByID(int id)
    {
        return db.tbl_Violator.Find(id);
    }
    public void Insert(tbl_Violator Violator)
    {
        db.tbl_Violator.Add(Violator);
        Save();
    }
    public void Delete(int id)
    {
        tbl_Violator Violator = db.tbl_Violator.Find(id);
        db.tbl_Violator.Remove(Violator);
        Save();
    }
    public void Update(tbl_Violator Violator)
    {
        db.Entry(Violator).State = EntityState.Modified;
        Save();
    }
    public void Save()
    {
        db.SaveChanges();
    }

}

2。逻辑层

ViolatorBs

 public class ViolatorBs
{
    private ViolatorDB objDb;
    public ViolatorBs()
    {
        objDb = new ViolatorDB();
    }
    public IEnumerable<tbl_Violator> GetALL()
    {
        return objDb.GetALL();
    }
    public tbl_Violator GetByID(int id)
    {
        return objDb.GetByID(id);
    }
    public void Insert(tbl_Violator Violator)
    {
        objDb.Insert(Violator);
    }
    public void Delete(int id)
    {
        objDb.Delete(id);
    }
    public void Update(tbl_Violator Vioaltor)
    {
        objDb.Update(Vioaltor);
    }
}

最后在表示层中使用逻辑层功能。插入执行如下:

    public class CreateViolatorController : Controller
{
    public TPCAEntities db = new TPCAEntities();
    private ViolatorBs objBs;
    public CreateViolatorController()
    {
        objBs = new ViolatorBs();
    }

    public ActionResult Index()
    {
        var voilator = new tbl_Violator();
         voilator=db.tbl_Violator.Add(voilator);

        ViewBag.id = voilator.VID;            

        return View();
    }

    [HttpPost]
    public ActionResult Create(tbl_Violator Violator)
    {

        try
        {
            if (ModelState.IsValid)
            {
                objBs.Insert(Violator);

                TempData["Msg"] = "Violator Created successfully";
                return RedirectToAction("Index");
            }
            else
            {
                return View("Index");
            }
        }
        catch (Exception ex)
        {
            TempData["Msg"] = "Failed..." + ex.Message + " " + ex.ToString();
            return RedirectToAction("Index");
        }

    }
}

现在主要部分是如何在执行插入时在另一个名为 Dues 的控制器中获取perticuller插入ID?

在sqlqery中我会使用@@ IDENTITY,但在实体框架中我不确定。 我是mvc框架的新手任何建议或帮助表示感谢提前感谢。

2 个答案:

答案 0 :(得分:3)

保存数据库上下文后,id会自动由EF填充回您的实体。

例如。

using(var context = new DbContext())
{
  var employee = new Employee(); //this has an id property
  context.Employees.Add(employee);
  context.SaveChanges();
  var id = employee.id; // you will find the id here populated by EF
}

答案 1 :(得分:0)

您不需要添加和保存您的表,因为您已经在voilatorDB类中完成了这项操作,只需获取最后一个ID,如下所示

    var id = yourTableName.Id;
db.yourTableName.find(id);

或者您可以使用VoilatorBs类函数

简单地编写一行代码
GetbyID(id);