Проблемы с получением результата EntitySchemaQuery

Создаю запрос
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())
{
}
то все значения читаются нормально.
В чём может быть проблема?

Нравится

2 комментария

А каким образом вы получаете значение колонок?
Попробуйте что-то типа этого:

    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);
}
}
и код теперь работает как ожидалось.

Позже попробую проверить с именами колонок.

Показать все комментарии