У меня есть приложение, которое моделирует электрическое распределение системы, при котором в случае сбоя некоторых компонентов маршрут автоматически перенаправляется. Я смоделировал это, добавив объект соединения, который имеет идентификатор для родительского компонента и идентификатор для дочернего компонента. Идея состоит в том, что для элементов, которые могут выйти из строя, существует соединение для нормального рабочего состояния и другое соединение для каждой неисправной ситуации. Например, если есть 40 компонентов, из которых 9 могут выйти из строя, у меня будет 2 ^ 9 (512) возможных сбоев и 2 ^ 9 объектов подключения для каждого компонента. Каждое соединение названо для режима отказа, который оно представляет.
Пока все хорошо, очень гибко и работает.
Однако, каждый раз, когда загружается схема шины, загружаются все соединения, что приводит к 40 * 512 (20480) объектам соединения, когда для текущего режима отказа требуется только 40, и, что неудивительно, это приводит к зависанию приложения ресурсы и бегите медленно.
Итак, я определил FilterDefinition для ограничения подключений, загружаемых к требуемому именованному соединению, если компонент относится к определенному типу, и к обычному соединению, если это какой-либо другой тип, и добавил это в отображение коллекции соединений включенного компонента. фильтр и установить параметр.
public FailureModeFilter()
{
WithName("FailureName")
.WithCondition("((Name = :name and ObjectType <> 8) or
(Name = 'Normal' and ObjectType = 8))")
.AddParameter("name", NHibernateUtil.String);
}
И неудивительно, что это работает.
Но, а вы знали, что будет загвоздка, не так ли?
Но, когда выбран новый режим сбоя и диаграмма перезагружена, он не применяет новый фильтр, а сохраняет старый. Я попытался установить новый параметр, отключить фильтр, включить его снова и установить все параметры безрезультатно.
Итак, что я делаю неправильно / не могу сделать / недоразумение (удалить, если применимо) или, если это не так, какие-либо предложения относительно того, как решить эту проблему?
Этот же сеанс используется, пока диаграмма открыта. Да, я знаю, что это не рекомендуемая лучшая практика, но по другим причинам это лучшее решение для этой части приложения. Пожалуйста, не отвлекайтесь на это, рассказывая мне о том, что это плохая практика с гибелью, унынием и унынием, как я уже знаю. Речь идет о смене фильтра.