IReferencesCascadeDelete
Интерфейс IReferencesCascadeDelete позволяет осуществлять каскадное удаление объектов (при удалении самого объекта все ссылающиеся на него объекты также удаляются).
Как работает IReferencesCascadeDelete
Логика по каскадному удалению прописана в бизнес-сервере интерфейса IReferencesCascadeDelete, собственных свойств и методов данный интерфейс не предоставляет. Таким образом, чтобы вместе с некоторым объектом удалить все объекты, которые на него ссылаются, достаточно, чтобы класс объекта был наследником от IReferencesCascadeDelete.
Поиск классов, которые ссылаются на искомый, осуществляется следующим образом:
- Берутся сборки, заданные в свойстве
AssembliesForIReferencesCascadeDeleteSearchклассаICSSoft.STORMNET.Business.Interfaces.InterfaceBusinessServer(задать можно с использованием методаSetupAdditionalAssemblies; если список сборок не задан, то поиск осуществляется только в сборке класса, наследующего отIReferencesCascadeDelete).
var assemblies = new[]
{
typeof(NewPlatform.Flexberry.ORM.Tests.Salad2).Assembly,
};
ICSSoft.STORMNET.Business.Interfaces.InterfaceBusinessServer.SetupAdditionalAssemblies(assemblies);
- В сборках ищутся типы, наследующие от DataObject.
- В найденных типах определяются свойства, которые содержат ссылку на искомый класс или его прародителей.
Пример
Пусть у нас есть диаграмма вида:

На диаграмму добавлен IReferencesCascadeDelete со стереотипом externalinterface , от которого наследуется класс Territory2 и Country2. При удалении экземпляров этого класса будут удаляться также все объекты, которые ссылаются на них.
При указанном расположении классов с учётом наследования:
- При удалении экземпляра класса
Territory2будут проверяться ссылки среди экземпляров классовHuman2иPlace2. - При удалении экземпляра класса
Country2будут проверяться ссылки среди экземпляров классовHuman2,Place2,Adress2,Apparatus2(экземпляры классаRegionявляются детейлами и будут удаляться даже без использования соответствующего интерфейса).