Когда запрос обрабатывается 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;
}
}
}
Возможно ли это?