Создаю запрос
EntitySchemaQuery esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Assignment");
esq.AddColumn("Name");
esq.AddColumn("Id");
esq.AddColumn("Reason.Name");
esq.AddColumn("Reason.Id");
esq.AddColumn("Period");
esq.AddColumn("Date");
var statusFilter = esq.CreateFilterWithParameters(FilterComparisonType.Equal,
"AssignmentStatus.Id",
Terrasoft.Configuration.AssignmentStatusIds.Proceed);
esq.Filters.Add(statusFilter);
var entities = esq.GetEntityCollection(UserConnection);
foreach (var entity in entities)
{
}
В результате не могу получить ни одного значения колонки, кроме Name.
Но если использовать
Select selectQuery = esq.GetSelectQuery(UserConnection);
DBExecutor dbExecutor = UserConnection.EnsureDBConnection();
IDataReader reader = selectQuery.ExecuteReader(dbExecutor);
while (reader.Read())
{
}
то все значения читаются нормально.
В чём может быть проблема?
Нравится
А каким образом вы получаете значение колонок?
Попробуйте что-то типа этого:
EntitySchemaQuery esq = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "Assignment"); string idColumnName = esq.AddColumn("Id").Name; string reasonColumnName = esq.AddColumn("Reason.Name").Name; //... var entities = esq.GetEntityCollection(UserConnection); foreach (var entity in entities) { string reason = entity.GetTypedColumnValue<string>(reasonColumnName); Guid id = entity.GetTypedColumnValue<Guid>(idColumnName); }
забиваю названия хардкодом, типа "Id" или "Reason.Name"
Добавил конструкцию
var entitiesCollection = new EntityCollection(UserConnection, "Assignment");
Select select = esq.GetSelectQuery(UserConnection);
using (DBExecutor dbe = UserConnection.EnsureDBConnection()) {
using (IDataReader reader = select.ExecuteReader(dbe)) {
entitiesCollection.LoadShallow(reader);
}
}
и код теперь работает как ожидалось.
Позже попробую проверить с именами колонок.