GetContextFromConstantExpression() private static method

Gets a DbContext value from the given member, or returns null if the member doesn't contain a DbContext instance.
private static GetContextFromConstantExpression ( Expression expression, MemberInfo member ) : DbContext
expression System.Linq.Expressions.Expression The expression for the object for the member, which may be null for a static member.
member System.Reflection.MemberInfo The member.
return DbContext
Exemplo n.º 1
0
 protected override Expression VisitMember(MemberExpression node)
 {
   Check.NotNull<MemberExpression>(node, nameof (node));
   PropertyInfo member = node.Member as PropertyInfo;
   MemberExpression expression = node.Expression as MemberExpression;
   if (member != (PropertyInfo) null && expression != null && (typeof (IQueryable).IsAssignableFrom(member.PropertyType) && typeof (DbContext).IsAssignableFrom(node.Member.DeclaringType)))
   {
     DbContext constantExpression = DbQueryVisitor.GetContextFromConstantExpression(expression.Expression, expression.Member);
     if (constantExpression != null)
     {
       Expression objectQueryConstant = DbQueryVisitor.CreateObjectQueryConstant(member.GetValue((object) constantExpression, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, (Binder) null, (object[]) null, (CultureInfo) null));
       if (objectQueryConstant != null)
         return objectQueryConstant;
     }
   }
   return base.VisitMember(node);
 }
Exemplo n.º 2
0
 protected override Expression VisitMethodCall(MethodCallExpression node)
 {
   Check.NotNull<MethodCallExpression>(node, nameof (node));
   if (typeof (DbContext).IsAssignableFrom(node.Method.DeclaringType))
   {
     MemberExpression memberExpression = node.Object as MemberExpression;
     if (memberExpression != null)
     {
       DbContext constantExpression = DbQueryVisitor.GetContextFromConstantExpression(memberExpression.Expression, memberExpression.Member);
       if (constantExpression != null && !node.Method.GetCustomAttributes<DbFunctionAttribute>(false).Any<DbFunctionAttribute>() && node.Method.GetParameters().Length == 0)
       {
         Expression objectQueryConstant = DbQueryVisitor.CreateObjectQueryConstant(node.Method.Invoke((object) constantExpression, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic, (Binder) null, (object[]) null, (CultureInfo) null));
         if (objectQueryConstant != null)
           return objectQueryConstant;
       }
     }
   }
   return base.VisitMethodCall(node);
 }