Actualmente estoy usando EF4.3 y el Código de Primera. La creación de mis objetos funciona (a través de mis vistas, simplemente usando el Crear generado automáticamente), pero cuando intento editar un objeto, no guarda ningún cambio que, por completo, se vincule a mis propiedades de navegación. He estado en reading on relationships, pero no entiendo cómo explicarle a mi contexto que la relación ha cambiado.no puede obtener la relación de actualizar las propiedades de navegación en el marco de la entidad
Aquí hay un código ejemplo de mi aplicación.
@* Snippet from my view where I link into my ViewModel. *@
<div class="row">
<div class="editor-label">
@Html.LabelFor(model => model.ManagerID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.ManagerID, ViewBag.Manager as SelectList, String.Empty)
@Html.ValidationMessageFor(model => model.ManagerID)
</div>
</div>
Aquí es mi implementación del controlador (POST de mi Editar):
[HttpPost]
public ActionResult Edit(ProjectViewModel projectViewModel)
{
if (ModelState.IsValid)
{
Project project = new Project();
project.ProjectID = projectViewModel.ProjectID;
project.Name = projectViewModel.Name;
project.ProjectManager = repository.GetUser(projectViewModel.ManagerID);
repository.InsertOrUpdateProject(project);
repository.Save();
return RedirectToAction("Index");
}
ViewBag.Manager = new SelectList(repository.GetUsers(), "UserID", "FullName", projectViewModel.ManagerID);
return View(projectViewModel);
}
Dentro de mi objeto Project:
public class Project
{
public int ProjectID { get; set; }
[Required]
public string Name { get; set; }
// Navigation Properties
public virtual User Manager { get; set; }
}
Aquí es el método correspondiente desde el repositorio (donde mi contexto reside):
public void InsertOrUpdateProject(Project project)
{
if (program.ProjectID == default(int))
{
context.Projects.Add(project);
}
else
{
context.Entry(project).State = EntityState.Modified;
}
}
Para que quede claro, esto funciona para actualizar mis propiedades, pero no actualiza mis propiedades de navegación (en este caso, Administrador). Aprecia cualquier ayuda.
Excelente. Gracias. Originalmente había hecho la ruta de la clave externa, pero tuve algunos problemas con ella. Resulta que funciona, pero tuve que definir el atributo [ForeignKey ("Nombre")] con la propiedad de navegación para que todo se asignara correctamente. Aceptando tu respuesta. ¡Gracias! – glockman
@ user1240560: Con los nombres en mi respuesta debería funcionar sin el atributo ForeignKey (detección de FK por convención de nombre). Pero si sus nombres son levemente diferentes y no siguen las reglas de la convención, entonces sí, necesita la anotación. – Slauma
@Slauma Te amo, los otros enfoques deberían funcionar con Code First Model, pero con DataBase First, el único que funcionó para mí fue tu hack, lo estuve jugando por días, y ahora tengo que decir que me encanta tanto –