Данная статья относится к новому аудиту.

Механизм определения строки подключения при работе аудита

’'’Механизм работает в версиях сборок после 27.01.2015.’’’

При ведении аудита важным является определить, как и в какую БД будут записываться данные аудита. Для этого определяется имя строки подключения к аудиту и тип сервиса данных.

Определение имени строки подключения

Определение имени строки подключения происходит по следующему алгоритму:

  1. Из настроек аудита из класса (AuditClassSetting) берётся настройка AuditClassConnectionStringName.
public class FirstClass : ICSSoft.STORMNET.DataObject, IDataObjectWithAuditFields
{
	...	
	
	/// <summary>
	/// Audit class settings.
	/// </summary>
	public class AuditSettings
	{
		/// <summary>
		/// Имя строки соединения с БД, куда необходимо писать аудит.
		/// </summary>
		public static string AuditClassConnectionStringName = "FirstClassConnectionStringName";
	}
}

Если AuditClassConnectionStringName определено в настройках аудита класса и значение является непустой последовательностью символов, то оно берётся в качестве имени строки подключения.

  1. Если предыдущим способом имя строки подключения не было определено, то берётся настройка IsDatabaseLocal (см. также следующую статью).

2.1. Если IsDatabaseLocal = false, то в качестве имени строки соединения берётся значение AuditConnectionStringName.

2.2. Если IsDatabaseLocal = true, то происходит поиск по структурам AuditDSSetting.

Считается, что если IsDatabaseLocal = true, то запись аудита будет производиться в “текущую” БД посредством “текущего” сервиса данных (понятие “текущий” условно, поскольку в метод определения имени строки подключения тип “текущего” сервиса данных может попасть различными способами).

Если “текущий” сервис данных некорректен, то в качестве имени строки соединения используется значение ConnStringName из первой AuditDSSetting из массива AuditDSSettings (имя строки соединения по умолчанию определено как <AppNameForAudit>_<AuditConnectionStringName>).

Иначе среди массива AuditDSSettings ищется AuditDSSetting, где ConnString равно строке соединения “текущего” сервиса данных, а DataServiceType - типу “текущего” сервиса данных, и значение первой найденной ConnStringName будет искомым именем строки соединения для аудита.

Реализация интерфейса IAudit ICSSoft.STORMNET.Business.Audit.Audit обрабатывает полученное имя строки соединения следующим образом:

Производится поиск строки соединения по имени среди доступных в файле конфигурации.

Если строка соединения не была найдена, то используется строка соединения из DataServiceProvider.DataService.

Определение типа сервиса данных

Тип сервиса данных, посредством которого будет записываться аудит, не определяется на этапе подготовки данных для записи в аудит. Тип определяется уже в реализации интерфейса IAudit.

Реализация интерфейса IAudit ICSSoft.STORMNET.Business.Audit.Audit определяет тип сервиса данных следующим образом (см. также следующую статью):

Тип сервиса данных всегда ищется в конфиг-файле по ключу <Имя строки="" соединения="">_DSType.

Если такой записи нет, то берётся сервис данных, указанных в настройке “DefaultDSType”.

Иначе используется тип сервиса данных DataServiceProvider.DataService.