Доступ к параметрам запроса в IDbCommandTreeInterceptor (EF 6.4) - PullRequest
0 голосов
/ 30 января 2020

Когда запрос обрабатывается IDbCommandTreeInterceptor, я хотел бы иметь возможность доступа к значениям параметров в самом запросе.

Я делаю запрос, подобный приведенному ниже, и хотел бы иметь возможность для доступа и изменения параметра «testname» внутри перехватчика.

context.TestEntities.FirstOrDefault(t.Name == "testname");

Вот перехватчик

public class Example : IDbCommandTreeInterceptor
{
    public void TreeCreated(DbCommandTreeInterceptionContext interceptionContext)
    {
        if (interceptionContext.Result.DataSpace != DataSpace.CSpace) { return; }

        if (interceptionContext.Result.CommandTreeKind != DbCommandTreeKind.Query) { return; }

        var queryCommand = interceptionContext.Result as DbQueryCommandTree;

        if (queryCommand == null) { return; }

        var newQuery = queryCommand.Query.Accept(new TestVisitor());

        interceptionContext.Result = new DbQueryCommandTree(queryCommand.MetadataWorkspace, queryCommand.DataSpace, newQuery);
    }

    private class TestVisitor : DefaultExpressionVisitor
    {
        public override DbExpression Visit(DbScanExpression expression)
        {
            // Can get the entity type.
            var entityType = expression.Target.ElementType as EntityType;

            // Can get the context.
            var context = expression.Target.EntityContainer;

            // Get the entity set.
            var entitySet = context.GetEntitySetByName(expression.Target.ToString(), true);

            // Need to be access the query parameters here?

            return expression;
        }
    }
}

Возможно ли это?

...