【发布时间】:2016-12-14 20:46:26
【问题描述】:
好的,所以我在 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 和实体框架的新手。过去几周我一直在自学,因此非常感谢任何帮助。
【问题讨论】:
-
使用数据库触发器来做这件事不是更容易吗?
-
Staffing_Hist 和 Staffing 被认为是两种不同的类型。 Automapper 非常适合这类任务。代码看起来像 staffing_hist = Mapper.Map(staffing);另一种选择是向 Staffing_Hist 添加一个构造函数,该构造函数接受一个 Staffing 对象并手动映射它。 var staffing_hist = new Staffing_Hist(staffing);
-
感谢您的建议。我一定会试试 Automapper。
-
Automapper 成功了。非常感谢!
标签: asp.net sql-server asp.net-mvc entity-framework visual-studio