Entity Framework 4 - ¿Dónde poner la lógica "ApplyCurrentValues"?

Estoy usando el "técnica del trozo" aactualizar mis POCO (utilizados en un contexto separado, ASP.NET MVC).

Este es el código que tengo actualmente en mi controlador (que funciona):

[HttpPost]
public ActionResult Edit(Review review)
{
   Review originalReview = _userContentService.FindById(review.PostId) as Review;
   var ctx = _unitOfWork as MySqlServerObjectContext;
   ctx.ApplyCurrentValues("MyEntities.Posts", review);
   _unitOfWork.Commit();
   // ..snip - MVC stuff..
}

Como puede ver, hay olor a código en todas partes. :)

Algunos puntos:

Yo uso Dependency Injection (basado en interfaz) para básicamente todoUtilizo el patrón Unidad de trabajo para abstraer ObjectContext y proporcionar persistencia en múltiples repositoriosActualmente miIUnitOfWork La interfaz tiene solo 1 método:void Commit();Controlador tieneIUserContentService yIUnitOfWork inyectar por DIIUserContentService llamadasFind en repositorios, que utilizan elObjectContext.

Estas son dos cosas que no me gustan con mi código anterior:

No quiero lanzar elIUnitOfWork comoMySqlServerObjectContext.No quiero que el controlador tenga que preocuparseApplyCurrentValues

Básicamente quiero que mi código se vea así:

[HttpPost]
public ActionResult Edit(Review review)
{
   _userContentService.Update(review);
   _unitOfWork.Commit();
   // ..snip - MVC stuff..
}

¿Alguna idea de cómo puedo hacer eso? (o algo similar).

Ya tengo inteligencia para resolver el nombre del conjunto de entidades en función del tipo (combinación de genéricos, pluralización), así que no se preocupe demasiado por eso.

PeroMe pregunto cuál es el mejor lugar para ponerApplyCurrentValues es? No parece apropiado ponerlo en elIUnitOfWork interfaz, ya que esta es una preocupación de persistencia (EF). Por la misma razón, no pertenece al Servicio. Si lo pongo en miMySqlServerObjectContext clase (tiene sentido), ¿de dónde llamaría esto, ya que nada tiene acceso directo a esta clase? Se inyecta a través de DI cuando algo lo solicitaIUnitOfWork.

¿Alguna idea?

EDITAR

Tengo una solución a continuación usando la técnica de código auxiliar, pero el problema es que si hubiera recuperado la entidad que estoy actualizando de antemano, arroja una excepción, indicando que ya existe una entidad con esa clave.

Lo que tiene sentido, aunque no estoy seguro de cómo resolver esto.

¿Necesito "verificar si la entidad ya está adjunta, si no, adjuntarla?"

¿Pueden ayudar los expertos de EF4?

EDITAR

No importa: encontró la solución, vea la respuesta a continuación.

Respuestas a la pregunta(1)

Su respuesta a la pregunta