/// <summary>
 /// Добавляет указанные атрибуты для определения схемы базы данных
 /// </summary>
 /// <param name="attributes">Атрибуты сборки для определения схемы базы данных</param>
 /// <param name="isGlobal">True - только глобальные, false - только локальные</param>
 public void AddAttributes(PersistentSchemaAttribute[] attributes, bool isGlobal)
 {
     foreach (PersistentSchemaAttribute attribute in attributes)
         if (attribute.IsGlobal == isGlobal)
         {
             if (string.IsNullOrEmpty(attribute.Namespace))
                 defaultSchema = attribute.Schema;
             else
             {
                 if (namespaceSchemas == null)
                     namespaceSchemas = new List<PersistentSchemaAttribute>();
                 namespaceSchemas.Add(attribute);
             }
         }
     if (namespaceSchemas != null)
         namespaceSchemas.Sort((a, b) => -string.Compare(a.Namespace, b.Namespace));
 }
        /// <summary>
        /// Устанавливает внешние атрибуты схем базы данных
        /// </summary>
        /// <param name="attributes">Атрибуты схем базы данных, указанные из произвольного источника</param>
        /// <param name="tablePrefixes">Префиксы таблиц, заданные в свойстве TablePrefixes приложения Xaf</param>
        /// <param name="overrideMode">Приоритет использования внешних атрибутов: true - высокий, false - низкий</param>
        public void SetupExternalSchemaAttributes(PersistentSchemaAttribute[] attributes, string tablePrefixes, bool overrideMode)
        {
            // Очистка установленных значений
            schemasExternal.Clear();
            this.tablePrefixes.Clear();

            // Схемы базы данных
            schemasExternal.AddAttributes(attributes, false);
            schemasExternal.AddAttributes(attributes, true);
            this.schemasExternalPriority = overrideMode;

            // Префиксы таблиц
            if (!string.IsNullOrEmpty(tablePrefixes))
            {
                List<PersistentSchemaAttribute> list = new List<PersistentSchemaAttribute>();
                foreach (string pair in tablePrefixes.Split(';'))
                {
                    string value = pair != null ? pair.Trim() : pair;
                    if (string.IsNullOrEmpty(value)) continue;
                    int pos = value.IndexOf('=');
                    if (pos <= 0 || pos == value.Length - 1) continue;
                    string nameSpace = value.Substring(0, pos).Trim();
                    string prefix = value.Substring(pos + 1, value.Length - pos - 1).Trim();
                    list.Add(new PersistentSchemaAttribute(prefix, nameSpace));
                }
                this.tablePrefixes.AddAttributes(list.ToArray(), false);
            }
        }