Сложный
На заметку. Примеры, приведенные в этой статье, реализованы в веб-сервисе. Пакет с реализацией веб-сервиса прикреплен в блоке "Ресурсы".
Пример 1
Пример. Создать экземпляр EntitySchemaQuery.
Метод CreateESQ
public string CreateESQ() { var result = ""; /* Получение экземпляра менеджера схем объектов. */ EntitySchemaManager esqManager = SystemUserConnection.EntitySchemaManager; /* Получение экземпляра схемы, которая будет установлена в качестве корневой для создаваемого экземпляра EntitySchemaQuery. */ var rootEntitySchema = esqManager.GetInstanceByName("City") as EntitySchema; /* Создание экземпляра EntitySchemaQuery, у которого в качестве корневой схемы установлена схема rootEntitySchema. */ var esqResult = new EntitySchemaQuery(rootEntitySchema); /* Добавление колонок, которые будут выбираться в результирующем запросе. */ esqResult.AddColumn("Id"); esqResult.AddColumn("Name"); /* Получение экземпляра Select, ассоциированного с созданным запросом EntitySchemaQuery. */ Select selectEsq = esqResult.GetSelectQuery(SystemUserConnection); /* Получение текста результирующего запроса созданного экземпляра EntitySchemaQuery. */ result = selectEsq.GetSqlText(); return result; }
Пример 2
Пример. Создать клон экземпляра EntitySchemaQuery.
Метод CreateESQClone
public string CreateESQClone() { var result = ""; EntitySchemaManager esqManager = SystemUserConnection.EntitySchemaManager; var esqSource = new EntitySchemaQuery(esqManager, "Contact"); esqSource.AddColumn("Id"); esqSource.AddColumn("Name"); /* Создание экземпляра EntitySchemaQuery, являющегося клоном экземпляра esqSource. */ var esqClone = new EntitySchemaQuery(esqSource); result = esqClone.GetSelectQuery(SystemUserConnection).GetSqlText(); return result; }
Пример 3
Пример. Получить результат выполнения запроса.
Метод GetEntitiesExample
public string GetEntitiesExample() { var result = ""; /* Создание запроса к схеме City, добавление в запрос колонки Name. */ var esqResult = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City"); var colName = esqResult.AddColumn("Name"); /* Выполнение запроса к базе данных и получение всей результирующей коллекции объектов. */ var entities = esqResult.GetEntityCollection(UserConnection); for (int i=0; i < entities.Count; i++) { result += entities[i].GetColumnValue(colName.Name).ToString(); result += "\n"; } /* Выполнение запроса к базе данных и получение объекта с заданным идентификатором. */ var entity = esqResult.GetEntity(UserConnection, new Guid("100B6B13-E8BB-DF11-B00F-001D60E938C6")); result += "\n"; result += entity.GetColumnValue(colName.Name).ToString(); return result; }
Пример 4
Пример. Использовать кэш запроса EntitySchemaQuery.
Метод UsingCacheExample
public Collection<string> UsingCacheExample() { /* Создание запроса к схеме City, добавление в запрос колонки Name. */ var esqResult = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City"); esqResult.AddColumn("Name"); /* Определение ключа, под которым в кэше будут храниться результаты выполнения запроса. В качестве кэша выступает кэш Creatio уровня сессии с локальным кэшированием данных (так как не переопределяется свойство Cache объекта). */ esqResult.CacheItemName = "EsqResultItem"; /* Коллекция, в которую будут помещены результаты выполнения запроса. */ var esqCityNames = new Collection<string>(); /* Коллекция, в которую будут помещаться закэшированные результаты выполнения запроса. */ var cachedEsqCityNames = new Collection<string>(); /* Выполнение запроса к базе данных и получение результирующей коллекции объектов. После выполнения этой операции результаты запроса будут помещены в кэш. */ var entities = esqResult.GetEntityCollection(UserConnection); /* Обработка результатов выполнения запроса и заполнение коллекции esqCityNames. */ foreach (var entity in entities) { esqCityNames.Add(entity.GetTypedColumnValue<string>("Name")); } /* Получение ссылки на кэш запроса esqResult по ключу CacheItemName в виде таблицы данных в памяти. */ var esqCacheStore = esqResult.Cache[esqResult.CacheItemName] as DataTable; /* Заполнение коллекции cachedEsqCityNames значениями из кэша запроса. */ if (esqCacheStore != null) { foreach (DataRow row in esqCacheStore.Rows) { cachedEsqCityNames.Add(row[0].ToString()); } } return cachedEsqCityNames; }
Пример 5
Пример. Использовать дополнительные настройки запроса EntitySchemaQuery.
Метод UsingCacheExample
public Collection<string> ESQOptionsExample() { /* Создание экземпляра запроса с корневой схемой City. */ var esqCities = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "City"); esqCities.AddColumn("Name"); /* Создание запроса с корневой схемой Country. */ var esqCountries = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Country"); esqCountries.AddColumn("Name"); /* Создание экземпляра настроек для возврата запросом первых 5 строк. */ var esqOptions = new EntitySchemaQueryOptions() { PageableDirection = PageableSelectDirection.First, PageableRowCount = 5, PageableConditionValues = new Dictionary<string, object>() }; /* Получение коллекции городов, которая будет содержать первые 5 городов результирующего набора данных. */ var cities = esqCities.GetEntityCollection(UserConnection, esqOptions); /* Получение коллекции стран, которая будет содержать первые 5 стран результирующего набора данных. */ var countries = esqCountries.GetEntityCollection(UserConnection, esqOptions); var esqStringCollection = new Collection<string>(); foreach (var entity in cities) { esqStringCollection.Add(entity.GetTypedColumnValue<string>("Name")); } foreach (var entity in countries) { esqStringCollection.Add(entity.GetTypedColumnValue<string>("Name")); } return esqStringCollection; }