Ограничение удаления с помощью NHibernate - PullRequest
1 голос
/ 22 апреля 2010

Я использую NHibernate (свободно) для доступа к старой сторонней базе данных с кучей таблиц, которые никак не связаны между собой. То есть дочерние таблицы имеют столбцы parentID, которые содержат первичный ключ родительской таблицы, но нет никаких отношений внешнего ключа, обеспечивающих эти отношения. В идеале я хотел бы добавить несколько внешних ключей, но не могу коснуться схемы базы данных.

Мое приложение работает нормально, но мне бы очень хотелось навязать правило ссылочной целостности, которое запретило бы удаление родительских объектов, если у них есть дети, например что-то похожее на «УДАЛЕННОЕ ОГРАНИЧЕНИЕ», но поддерживается NHibernate.

Любые идеи о том, как подойти к этому, будут оценены. Стоит ли искать метод OnDelete () в интерфейсе IInterceptor или есть другие способы решить эту проблему?

Конечно, любое решение может привести к снижению производительности, но я могу с этим смириться.

1 Ответ

1 голос
/ 22 апреля 2010

Я не могу придумать, как это сделать в NHibernate, потому что это потребовало бы, чтобы NHibernate имел некоторые знания об отношениях. Я бы обработал это в коде, используя шаблон спецификации . Например (используя объект Company со ссылками на объекты Employee):

public class CanDeleteCompanySpecification
{
    bool IsSatisfiedBy(Company candidate)
    {
        // Check for related Employee records by loading collection
        // or using COUNT(*).
        // Return true if there are no related records and the Company can be deleted.
        // Hope that no linked Employee records are created before the delete commits.
    }
}
...