1
我有一个专门用于编辑常规项目信息(名称,说明,...)的视图。我有另一种视图,专门用于更改附加到项目的图像。将视图模型保存到存储库时会丢失一些数据
这里是一个项目
public class Project
{
[Key]
public int ProjectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public string Client { get; set; }
public int Year { get; set; }
public byte[] Image { get; set; }
public string FileName { get; set; }
public int FileLength { get; set; }
public string FileType { get; set; }
}
这里的基本模型是用于编辑基本项目的相关信息
public class ProjectViewModel
{
public int ProjectID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Category { get; set; }
public string Client { get; set; }
public int Year { get; set; }
}
这里视图模型被用于改变连接到项目
图像视图模型public class UploadImageViewModel
{
public int ProjectID { get; set; }
public byte[] Image { get; set; }
public string FileName { get; set; }
public int FileLength { get; set; }
public string FileType { get; set; }
}
到目前为止好。当我通过我的视图编辑项目(第一个编辑基本信息)并提交更改时,出现问题。然后在控制器中的动作被触发并执行以下代码:
[HttpPost]
public ActionResult EditProject(ProjectViewModel viewModel)
{
if (!ModelState.IsValid)
return View();
// Map viewModel into model
Project model = Mapper.Map<ProjectViewModel, Project>(viewModel);
m_AdminService.SaveProject(model);
return RedirectToAction("ListProjects");
}
正如你所看到的,我视图模型映射在项目模型,然后我保存这个对象。
这里是在仓库中执行的代码
public void SaveProject(Project project)
{
if (project.ProjectID == 0)
{
m_Context.Projects.Add(project);
}
else
{
var entry = m_Context.Entry(project);
entry.State = EntityState.Modified;
}
m_Context.SaveChanges();
}
的问题是,如果我以前有附加到项目存储库中的图像,然后我的形象在此过程中,因为传递的对象丢失到存储库没有任何图像内容。
你明白我的意思了吗?我该如何解决这个问题?
我喜欢观看只包含必要信息的模型。将这些部分信息保存到原始对象而不丢失数据时会发生问题。
谢谢。
可惜,这是行不通的。在注入数据之前,automapper会清除目标对象中的所有内容。所以即使我先从数据库中取出项目,它也会被automapper清除。 – Bronzato
也许切换到另一个映射器是可行的吗? – Zruty
最后,上面的解决方案工作。谢谢。 – Bronzato