2017-03-21 94 views
0

如何,如果被选中的复选框保存在多个表中数据好坏参半:如何使用实体框架将数据保存在多个表中?

[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(); 
     } 

这是在控制器代码,我需要将数据从两种形式的混合,并保存到两个表,我需要的是这样的,现在我的问题只是在其他部分的实施。

我提出申请的公交票务系统,我需要这个,如果被选中的回报方式复选框,添加:摆脱(与第一台tbl_rezervacii有关),返回和返回的关系之日起,包括相同的代理ID,价格等数据保存在第一张表tbl_rezervacii中。

修改的控制器CODE:

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"); 
    } 

如何从次级形式采取数据和一起保存在第二表?

回答

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(); 
+0

谢谢。这对我有帮助,并且答案正确。 – Xelmep

+0

只需要在第二个tabel tbl_povratni中添加Datum2,这是第一张表上的Datum不同。如** Datum2 = tbl_povratni.Datum2 **。我尝试这个,但不去。怎么做? – Xelmep

+0

什么是Datum2值? – Ahmed

相关问题