Сложный
На заметку. Примеры, приведенные в этой статье, реализованы в веб-сервисе. Пакет с реализацией веб-сервиса прикреплен в блоке "Ресурсы".
Пример 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;
}