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
являются детейлами и будут удаляться даже без использования соответствующего интерфейса).