0

好吧,我在asp.net實體框架mvc項目中的同一個model.edmx中有兩個不同的表。第一張表是我設置更新的主表,並且沒有任何問題。第二張表是一張與第一張表完全相同的空表。第二張表將插入表1中的行以記錄更改以及誰隨時間進行了更改。在同一個數據庫中將相同的數據插入到兩個不同的表中

有沒有什麼辦法可以將表1中的數據建模並將其轉換爲表2的建模並插入該行?

當試圖從表2中引用表1時得到的錯誤是「無法將類型'Model1'隱式轉換爲'Model2'」。

這裏就是我試圖做到這一點的ActionResult:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "ID,ECode,EmpType,FTE,TeamName,ReportGroup,Include,GoalEdDol,GoalEdAcct,GoalCmDol,GoalCmAcct,Update_By,Update_Date")] Staffing staffing) 
    { 
     if (ModelState.IsValid) 
     { 
      staffing.Update_Date = DateTime.Now; 
      staffing.Update_By = Request.LogonUserIdentity.Name.Split('\\')[1]; 
      db.Entry(staffing).State = EntityState.Modified; 
      db.SaveChanges(); 


      Staffing_Hist staffing_hist = staffing; 
      // I would like to do similar to above but I have to convert staffing into a staffing_hist model 

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

我是新來asp.net和實體框架。過去幾周我一直在教我自己,所以任何幫助都非常感謝。

+1

使用數據庫觸發器來代替它會更容易嗎? –

+1

Staffing_Hist和Staffing被認爲是兩種不同的類型。 [Automapper](http://automapper.org/)非常適合這些類型的任務。代碼看起來像staffing_hist = Mapper.Map(人員配備);另一個選擇是向Staffing_Hist添加一個構造函數,該構造函數需要一個Staffing對象並手動映射它。 var staffing_hist = new Staffing_Hist(人員配置); –

+0

謝謝你的建議。我一定會嘗試一下Automapper。 – cole570

回答

0

你可以試試這種方式。

public ActionResult Edit([Bind(Include = "id,namee,no")] tbl_in staffing) 
    { 
     if (ModelState.IsValid) 
     { 
      staffing.namee ="Test"; 
      staffing.no = 1235467890; 
      db.Entry(staffing).State = EntityState.Modified; 
      db.SaveChanges(); 

      tbl_out t = new tbl_out(); 
      t.id = staffing.id; 
      t.namee = staffing.namee; 
      t.no = staffing.no; 
      db.tbl_out.Add(t); 
      db.SaveChanges(); 

     } 
     return View(staffing); 
    } 
相關問題