Я хочу знать, можно ли удалить «Клиента» (т. Е. На него нет ссылок ни в каких других таблицах).
В действительности, база данных не несет ответственности за определение возможности удаления Клиента. Это скорее часть вашей бизнес-логики .
Вы просите проверить ссылочную целостность в базе данных.
В мире без ООП все нормально.
Но при работе с объектами (как и вы) лучше добавить логику к вашим объектам ( объекты имеют состояние и поведение; БД - только состояние ).
Итак, я бы добавил метод в класс Customer, чтобы определить, можно ли его удалить или нет. Таким образом вы можете правильно (единично) проверить работоспособность .
Например, допустим, у нас есть правило Клиента можно удалить, только если у него нет заказов и он не участвовал в форуме .
Тогда у вас будет объект Customer, подобный этому (простейший возможный случай):
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
}
}
}
Это очень чистый и простой дизайн, который прост в использовании, тестировании и не сильно зависит от NHibernate или базовой базы данных.
Вы можете использовать это так:
if (myCustomer.CanBeDeleted)
session.Delete(mycustomer)
В дополнение к этому вы можете настроить NHibernate для удаления связанных заказов и других ассоциаций, если требуется.
Примечание: конечно, приведенный выше пример является просто простейшим иллюстративным решением. Возможно, вы захотите сделать такое правило частью проверки , которое должно применяться при удалении объекта.