Si la entidad ya existe, puede lanzar una excepción o actualizar los campos de la entidad existente.
Si elige este último, el método probablemente debería llamarse algo así como AddOrUpdate()
LINQ to SQL de ejemplo
Si estoy Recuperación de un solo registro, voy a utilizar
public Entity GetEntity(int entityID)
{
return dataContext.Entities.SingleOrDefault(e => e.EntityID = entityID);
}
... Y en el método de llamada, verificaré si lo que se devuelve es nulo antes de intentar usar la entidad devuelta.
Si estoy actualizando un registro, recuperaré la entidad como se muestra, editaré la entidad y luego llamaré a un método de depósito UpdateEntity(entityID)
para actualizar los campos en la base de datos.
Si agrego un registro, es aún más fácil. Dado que esta es una base de datos, y mis tablas contienen siempre un campo de identidad de tipo int (un número de auto-asignable, fundamentalmente), la adición de un registro es la operación más simple de todos (es siempre un nuevo registro):
Public void InsertEntity(Entity entity)
{
dataContext.Entities.InsertOnSubmit(entity);
dataContext.SubmitChanges();
}
Las reglas comerciales (por ejemplo, las direcciones de correo electrónico son únicas) pueden manejarse en el repositorio o en una capa comercial separada. Si está buscando la forma más "correcta", creo que la mayoría de la gente estaría de acuerdo en que las reglas comerciales pertenecen a su propia capa de lógica de negocios.
@Alastair Pitts, ¿significa que la verificación de campos únicos también forma parte del trabajo del repositorio? –