如何使用Entity Framework在多个表中保存数据?

时间:2017-03-21 18:18:37

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

如果选中复选框,如何在多个表中保存混合数据:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "rID,AgentID,karta_br,Datum,patnikID,stanicaOD,stanicaDO,cena,povratna")] tbl_rezervacii tbl_rezervacii)
{
    if (ModelState.IsValid)
    {
        if (tbl_rezervacii.povratna != true)
        {
            db.tbl_rezervacii.Add(tbl_rezervacii);
            db.SaveChanges();
        }
        else
        {
                tbl_rezervacii rezervacii = new tbl_rezervacii()
            {
               ???????????????????????
            };

            db.tbl_rezervacii.Add(rezervacii);
            db.SaveChanges();

            tbl_povratni povratni = new tbl_povratni()
            {
                ???????????????????????

            };
            db.tbl_povratni.Add(povratni);
            db.SaveChanges();
        }

这是控制器中的代码,我需要混合来自两个表单的数据,并保存到两个表,我需要这样的东西,现在我的问题只是在其他部分的实现中。

我为Bus Ticket系统申请,我需要这个,如果选中了返回方式复选框添加: rID (与第一个表tbl_rezervacii相关),返回日期和返回关系,包含相同代理商ID,价格等数据,保存在第一个tbl_rezervacii表中。

修改后的控制器代码:

 public ActionResult Create([Bind(Include = "rID,AgentID,karta_br,Datum,patnikID,stanicaOD,stanicaDO,cena,povratna")] tbl_rezervacii tbl_rezervacii )
    {

        if (ModelState.IsValid)
        {   
            if (tbl_rezervacii.povratna != true)
            {

                db.tbl_rezervacii.Add(tbl_rezervacii);

                db.SaveChanges();
            }
            else
            {

                tbl_rezervacii rezervacii = new tbl_rezervacii()
                {

                    AgentID = tbl_rezervacii.AgentID,
                    karta_br = tbl_rezervacii.karta_br,
                    Datum = tbl_rezervacii.Datum,
                    patnikID = tbl_rezervacii.patnikID,
                    stanicaOD = tbl_rezervacii.stanicaOD,
                    stanicaDO = tbl_rezervacii.stanicaDO,
                    cena = tbl_rezervacii.cena,
                    povratna = tbl_rezervacii.povratna
                   };

                db.tbl_rezervacii.Add(rezervacii);
                //db.SaveChanges();
                var rows = db.SaveChanges();

                tbl_povratni povratna = new tbl_povratni()
                {
                    rezID = rezervacii.rID,
                    AgentID = rezervacii.AgentID,
                    karta_br = rezervacii.karta_br,
                    DatumP = **tbl_povratni.DatumP**,
                    patnikID = rezervacii.patnikID,
                    stanicaPOD = **tbl_povratni.stanicaPOD**,
                    stanicaPDO = **tbl_povratni.stanicaPDO**,
                };
                db.tbl_povratni.Add(povratna);
                db.SaveChanges();
            }

           ViewBag.AgentID = new SelectList(db.tbl_agenti, "aID", "agent_ime", tbl_rezervacii.AgentID);
           ViewBag.patnikID = new SelectList(db.tbl_patnici, "pID", "ime", tbl_rezervacii.patnikID);
           ViewBag.stanicaOD = new SelectList(db.tbl_stanici, "sID", "stanica", tbl_rezervacii.stanicaOD); 
           ViewBag.stanicaDO = new SelectList(db.tbl_stanici, "sID", "stanica", tbl_rezervacii.stanicaDO);
          ViewBag.stanicaPOD = new SelectList(db.tbl_stanici, "sID", "stanica", tbl_rezervacii.tbl_povratni.stanicaPOD); 
          ViewBag.stanicaPDO = new SelectList(db.tbl_stanici, "sID", "stanica", tbl_rezervacii.tbl_povratni.stanicaPDO);

            return View(tbl_rezervacii);
        }
        return RedirectToAction("Index");
    }

如何从二级表格中获取数据并将其保存在第二个表格中?

1 个答案:

答案 0 :(得分:0)

因此,如果选中复选框,您想将数据保存到两个表中并在第二个表中使用第一个表(rID)的主键吗?如果rID是自动递增,则EF将使用数据库指定的值更新它。

        tbl_rezervacii rezervacii = new tbl_rezervacii()
        {
           AgentID = tbl_rezervacii.AgendID, 
           karta_br = tbl_rezervacii.karta_br
           // and so on...
        };

        db.tbl_rezervacii.Add(rezervacii);
        var rows = db.SaveChanges(); // optional, rows will be > 0 if saved successfully.

        tbl_povratni povratni = new tbl_povratni()
        {
            // if rID is auto increment
            rID = rezervacii.rID,
            // and so on...                
        };
        db.tbl_povratni.Add(povratni);
        db.SaveChanges();