J'ai une vue spécialement conçue pour éditer les infos générales du projet (nom, description, ...). J'ai une autre vue spécialement conçue pour changer l'image attachée à un projet.Quelques données perdues lors de la sauvegarde (à partir de) voir les modèles dans le référentiel
Voici le modèle de base d'un projet
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; }
}
Voici le modèle de vue pour l'édition projet de base infos
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; }
}
Voici le modèle de vue pour changer l'image attachée à un projet
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; }
}
Jusqu'ici tout va bien. Le problème s'est produit lorsque j'ai édité un projet à travers ma vue (le premier pour éditer les infos de base) et soumettre des changements. Ensuite, l'action dans le contrôleur est déclenché et le code suivant est exécuté:
[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");
}
Comme vous pouvez le voir, je mapper le modèle de vue dans un modèle de projet, puis-je enregistrer cet objet.
Et voici le code exécuté dans le référentiel
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();
}
Le problème est que si j'avais déjà une image attachée au projet dans le référentiel, puis mon image est perdue au cours de ce processus parce que l'objet est passé au référentiel n'a pas contenu d'image.
Voyez-vous ce que je veux dire? Comment dois-je gérer ce problème?
J'aime l'idée d'avoir des modèles de vue contenant seulement les informations nécessaires. Le problème se produit lors de la sauvegarde de ces informations partielles sur l'objet d'origine sans perte de données.
Merci.
Malheureusement, cela ne fonctionne pas. L'automapper efface tout dans l'objet de destination avant d'y injecter des données. Donc, même si je tire d'abord le projet de la base de données, il est effacé par l'automapper. – Bronzato
Peut-être est-il viable de passer à un autre mappeur? – Zruty
Enfin la solution ci-dessus fonctionne. Merci. – Bronzato