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); 
    } 
相关问题