Quiero saber si se puede eliminar un "Cliente" (es decir, no se está haciendo referencia en ninguna otra tabla).
En realidad, no es responsabilidad de la base de datos determinar si el cliente puede ser eliminado. Es más bien parte de su lógica comercial.
Está solicitando verificar la integridad referencial en la base de datos.
Está bien en el mundo no OOP. Pero cuando se trata de objetos (como lo hace), es mejor agregar la lógica a sus objetos (objetos tienen estado y comportamiento; DB - solo el estado).
Por lo tanto, agregaría un método a la clase Cliente para determinar si se puede eliminar o no. De esta manera, puede probar (unidad) correctamente la funcionalidad.
Por ejemplo, supongamos que tenemos una regla El cliente solo puede eliminarse si no tiene pedidos y no ha participado en el foro.
, entonces tendrá objeto Cliente similar a este (caso más simple posible):
public class Customer
{
public virtual ISet<Order> Orders { get; protected set; }
public virtual ISet<ForumPost> ForumPosts { get; protected set; }
public virtual bool CanBedeleted
{
get
{
return Orders.Count == 0 && ForumPosts.Count == 0
}
}
}
Esto es muy limpio y el diseño que es fácil de usar, simple prueba y no depende en gran medida NHibernate o base de datos subyacente .
Se puede utilizar la siguiente manera:
if (myCustomer.CanBeDeleted)
session.Delete(mycustomer)
Además de que se puede afinar NHibernate para borrar las órdenes relacionadas y otras asociaciones, si es necesario.
La nota: por supuesto, el ejemplo anterior es sólo más simple solución ilustrativa posible. Es posible que desee establecer una regla part of the validation que se debe aplicar al eliminar el objeto.
Usted dice que 'Customer' está referenciado en" las otras tablas ". ¿El plural está destinado? Es decir, ¿se hace referencia al 'Cliente 'desde * varias * otras clases de entidad? (La respuesta afecta las posibles soluciones.) –
@Jorn, Sí, se hace referencia en muchas otras tablas. –