public SqlTranslatingExpressionVisitor(
            [NotNull] IRelationalAnnotationProvider relationalAnnotationProvider,
            [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator,
            [NotNull] IMethodCallTranslator methodCallTranslator,
            [NotNull] IMemberTranslator memberTranslator,
            [NotNull] RelationalQueryModelVisitor queryModelVisitor,
            [CanBeNull] SelectExpression targetSelectExpression = null,
            [CanBeNull] Expression topLevelPredicate            = null,
            bool bindParentQueries = false,
            bool inProjection      = false)
        {
            Check.NotNull(relationalAnnotationProvider, nameof(relationalAnnotationProvider));
            Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator));
            Check.NotNull(methodCallTranslator, nameof(methodCallTranslator));
            Check.NotNull(memberTranslator, nameof(memberTranslator));
            Check.NotNull(queryModelVisitor, nameof(queryModelVisitor));

            _relationalAnnotationProvider          = relationalAnnotationProvider;
            _compositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator;
            _methodCallTranslator   = methodCallTranslator;
            _memberTranslator       = memberTranslator;
            _queryModelVisitor      = queryModelVisitor;
            _targetSelectExpression = targetSelectExpression;
            _topLevelPredicate      = topLevelPredicate;
            _bindParentQueries      = bindParentQueries;
            _inProjection           = inProjection;
        }
 /// <summary>
 /// 初始化类<see cref="SqlServerExpressionVisitorFactory"/>。
 /// </summary>
 /// <param name="sqlHelper">SQL操作特殊标识接口。</param>
 /// <param name="typeMapper">类型匹配接口。</param>
 /// <param name="memberTranslator">字段或属性转换接口。</param>
 /// <param name="methodCallTranslator">方法调用转换接口。</param>
 /// <param name="fragmentTranslator">代码段转换接口。</param>
 public SqlServerExpressionVisitorFactory(ISqlHelper sqlHelper, ITypeMapper typeMapper, IMemberTranslator memberTranslator, IMethodCallTranslator methodCallTranslator, IExpressionFragmentTranslator fragmentTranslator)
 {
     _sqlHelper            = sqlHelper;
     _typeMapper           = typeMapper;
     _memberTranslator     = memberTranslator;
     _methodCallTranslator = methodCallTranslator;
     _fragmentTranslator   = fragmentTranslator;
 }
Ejemplo n.º 3
0
        /// <summary>
        ///     Clones this dependency parameter object with one service replaced.
        /// </summary>
        /// <param name="compositeExpressionFragmentTranslator"> A replacement for the current dependency of this type. </param>
        /// <returns> A new parameter object with the given service replaced. </returns>
        public SqlTranslatingExpressionVisitorDependencies With([NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator)
        => new SqlTranslatingExpressionVisitorDependencies(
            compositeExpressionFragmentTranslator,
            MethodCallTranslator,
            MemberTranslator,
#pragma warning disable 618
            RelationalTypeMapper,
#pragma warning restore 618
            TypeMappingSource);
 /// <summary>
 /// 初始化类<see cref="SqlExpressionVisitor"/>。
 /// </summary>
 /// <param name="sqlHelper">SQL操作特殊标识接口。</param>
 /// <param name="typeMapper">类型匹配。</param>
 /// <param name="memberTranslator">字段或属性转换接口。</param>
 /// <param name="methodCallTranslator">方法调用转换接口。</param>
 /// <param name="fragmentTranslator">代码段转换接口。</param>
 /// <param name="schemaFunc">获取前缀代理方法。</param>
 protected SqlExpressionVisitor(ISqlHelper sqlHelper, ITypeMapper typeMapper, IMemberTranslator memberTranslator, IMethodCallTranslator methodCallTranslator, IExpressionFragmentTranslator fragmentTranslator, Func <Type, string> schemaFunc)
 {
     _sqlHelper            = sqlHelper;
     _typeMapper           = typeMapper;
     _memberTranslator     = memberTranslator;
     _methodCallTranslator = methodCallTranslator;
     _fragmentTranslator   = fragmentTranslator;
     Delimter = (info, type) => sqlHelper.DelimitIdentifier(info.Name, schemaFunc(type));
 }
 /// <summary>
 /// 初始化类<see cref="SqlExpressionVisitor"/>。
 /// </summary>
 /// <param name="sqlHelper">SQL操作特殊标识接口。</param>
 /// <param name="typeMapper">类型匹配。</param>
 /// <param name="memberTranslator">字段或属性转换接口。</param>
 /// <param name="methodCallTranslator">方法调用转换接口。</param>
 /// <param name="fragmentTranslator">代码段转换接口。</param>
 protected SqlExpressionVisitor(ISqlHelper sqlHelper, ITypeMapper typeMapper, IMemberTranslator memberTranslator, IMethodCallTranslator methodCallTranslator, IExpressionFragmentTranslator fragmentTranslator)
 {
     _sqlHelper            = sqlHelper;
     _typeMapper           = typeMapper;
     _memberTranslator     = memberTranslator;
     _methodCallTranslator = methodCallTranslator;
     _fragmentTranslator   = fragmentTranslator;
     Delimter = (info, _) => sqlHelper.DelimitIdentifier(info.Name);
 }
        /// <summary>
        ///     <para>
        ///         Creates the service dependencies parameter object for a <see cref="SqlTranslatingExpressionVisitor" />.
        ///     </para>
        ///     <para>
        ///         This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///         directly from your code. This API may change or be removed in future releases.
        ///     </para>
        ///     <para>
        ///         Do not call this constructor directly from either provider or application code as it may change
        ///         as new dependencies are added. Instead, use this type in your constructor so that an instance
        ///         will be created and injected automatically by the dependency injection container. To create
        ///         an instance with some dependent services replaced, first resolve the object from the dependency
        ///         injection container, then replace selected services using the 'With...' methods. Do not call
        ///         the constructor at any point in this process.
        ///     </para>
        /// </summary>
        /// <param name="compositeExpressionFragmentTranslator"> The composite expression fragment translator. </param>
        /// <param name="methodCallTranslator"> The method call translator. </param>
        /// <param name="memberTranslator"> The member translator. </param>
        /// <param name="relationalTypeMapper"> The relational type mapper. </param>
        public SqlTranslatingExpressionVisitorDependencies(
            [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator,
            [NotNull] IMethodCallTranslator methodCallTranslator,
            [NotNull] IMemberTranslator memberTranslator,
            [NotNull] IRelationalTypeMapper relationalTypeMapper)
        {
            Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator));
            Check.NotNull(methodCallTranslator, nameof(methodCallTranslator));
            Check.NotNull(memberTranslator, nameof(memberTranslator));
            Check.NotNull(relationalTypeMapper, nameof(relationalTypeMapper));

            CompositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator;
            MethodCallTranslator = methodCallTranslator;
            MemberTranslator     = memberTranslator;
            RelationalTypeMapper = relationalTypeMapper;
        }
        /// <summary>
        ///     <para>
        ///         Creates the service dependencies parameter object for a <see cref="SqlTranslatingExpressionVisitor" />.
        ///     </para>
        ///     <para>
        ///         This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///         directly from your code. This API may change or be removed in future releases.
        ///     </para>
        ///     <para>
        ///         Do not call this constructor directly from either provider or application code as it may change
        ///         as new dependencies are added. Instead, use this type in your constructor so that an instance
        ///         will be created and injected automatically by the dependency injection container. To create
        ///         an instance with some dependent services replaced, first resolve the object from the dependency
        ///         injection container, then replace selected services using the 'With...' methods. Do not call
        ///         the constructor at any point in this process.
        ///     </para>
        /// </summary>
        /// <param name="compositeExpressionFragmentTranslator"> The composite expression fragment translator. </param>
        /// <param name="methodCallTranslator"> The method call translator. </param>
        /// <param name="memberTranslator"> The member translator. </param>
        /// <param name="typeMappingSource"> The type mapper. </param>
        public SqlTranslatingExpressionVisitorDependencies(
            [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator,
            [NotNull] ICompositeMethodCallTranslator methodCallTranslator,
            [NotNull] IMemberTranslator memberTranslator,
            [NotNull] IRelationalTypeMappingSource typeMappingSource)
        {
            Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator));
            Check.NotNull(methodCallTranslator, nameof(methodCallTranslator));
            Check.NotNull(memberTranslator, nameof(memberTranslator));
            Check.NotNull(typeMappingSource, nameof(typeMappingSource));

            CompositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator;
            MethodCallTranslator = methodCallTranslator;
            MemberTranslator     = memberTranslator;
            TypeMappingSource    = typeMappingSource;
        }
        public SqlTranslatingExpressionVisitorFactory(
            [NotNull] IRelationalAnnotationProvider relationalAnnotationProvider,
            [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator,
            [NotNull] IMethodCallTranslator methodCallTranslator,
            [NotNull] IMemberTranslator memberTranslator)
        {
            Check.NotNull(relationalAnnotationProvider, nameof(relationalAnnotationProvider));
            Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator));
            Check.NotNull(methodCallTranslator, nameof(methodCallTranslator));
            Check.NotNull(memberTranslator, nameof(memberTranslator));

            _relationalAnnotationProvider = relationalAnnotationProvider;
            _compositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator;
            _methodCallTranslator = methodCallTranslator;
            _memberTranslator = memberTranslator;
        }
        public SqlTranslatingExpressionVisitorFactory(
            [NotNull] IRelationalAnnotationProvider relationalAnnotationProvider,
            [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator,
            [NotNull] IMethodCallTranslator methodCallTranslator,
            [NotNull] IMemberTranslator memberTranslator)
        {
            Check.NotNull(relationalAnnotationProvider, nameof(relationalAnnotationProvider));
            Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator));
            Check.NotNull(methodCallTranslator, nameof(methodCallTranslator));
            Check.NotNull(memberTranslator, nameof(memberTranslator));

            _relationalAnnotationProvider          = relationalAnnotationProvider;
            _compositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator;
            _methodCallTranslator = methodCallTranslator;
            _memberTranslator     = memberTranslator;
        }
        /// <summary>
        ///     Creates a new instance of <see cref="SqlTranslatingExpressionVisitor" />.
        /// </summary>
        /// <param name="dependencies"> Parameter object containing dependencies for this service. </param>
        /// <param name="queryModelVisitor"> The query model visitor. </param>
        /// <param name="targetSelectExpression"> The target select expression. </param>
        /// <param name="topLevelPredicate"> The top level predicate. </param>
        /// <param name="inProjection"> true if the expression to be translated is a LINQ projection. </param>
        public SqlTranslatingExpressionVisitor(
            [NotNull] SqlTranslatingExpressionVisitorDependencies dependencies,
            [NotNull] RelationalQueryModelVisitor queryModelVisitor,
            [CanBeNull] SelectExpression targetSelectExpression = null,
            [CanBeNull] Expression topLevelPredicate            = null,
            bool inProjection = false)
        {
            Check.NotNull(dependencies, nameof(dependencies));
            Check.NotNull(queryModelVisitor, nameof(queryModelVisitor));

            _compositeExpressionFragmentTranslator = dependencies.CompositeExpressionFragmentTranslator;
            _methodCallTranslator   = dependencies.MethodCallTranslator;
            _memberTranslator       = dependencies.MemberTranslator;
            _relationalTypeMapper   = dependencies.RelationalTypeMapper;
            _queryModelVisitor      = queryModelVisitor;
            _targetSelectExpression = targetSelectExpression;
            _topLevelPredicate      = topLevelPredicate;
            _inProjection           = inProjection;
        }
        public CypherTranslatingExpressionVisitor(
            [NotNull] SqlTranslatingExpressionVisitorDependencies dependencies,
            [NotNull] CypherQueryModelVisitor queryModelVisitor,
            [CanBeNull] ReadOnlyExpression targetReadOnlyExpresion = null,
            [CanBeNull] Expression topLevelWhere = null,
            bool inReturn = false
            )
        {
            Check.NotNull(dependencies, nameof(dependencies));
            Check.NotNull(queryModelVisitor, nameof(queryModelVisitor));

            _compositeExpressionFragmentTranslator = dependencies.CompositeExpressionFragmentTranslator;
            _targetReadOnlyExpression = targetReadOnlyExpresion;
            _inReturn         = inReturn;
            _isTopLevelReturn = inReturn;

            _queryModelVisitor    = queryModelVisitor;
            _relationalTypeMapper = dependencies.RelationalTypeMapper;
        }
Ejemplo n.º 12
0
        /// <summary>
        ///     <para>
        ///         Creates the service dependencies parameter object for a <see cref="SqlTranslatingExpressionVisitor" />.
        ///     </para>
        ///     <para>
        ///         This API supports the Entity Framework Core infrastructure and is not intended to be used
        ///         directly from your code. This API may change or be removed in future releases.
        ///     </para>
        ///     <para>
        ///         Do not call this constructor directly from either provider or application code as it may change
        ///         as new dependencies are added. Instead, use this type in your constructor so that an instance
        ///         will be created and injected automatically by the dependency injection container. To create
        ///         an instance with some dependent services replaced, first resolve the object from the dependency
        ///         injection container, then replace selected services using the 'With...' methods. Do not call
        ///         the constructor at any point in this process.
        ///     </para>
        /// </summary>
        /// <param name="compositeExpressionFragmentTranslator"> The composite expression fragment translator. </param>
        /// <param name="methodCallTranslator"> The method call translator. </param>
        /// <param name="memberTranslator"> The member translator. </param>
        /// <param name="relationalTypeMapper"> The relational type mapper. </param>
        /// <param name="typeMappingSource"> The type mapper. </param>
        public SqlTranslatingExpressionVisitorDependencies(
            [NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator,
            [NotNull] ICompositeMethodCallTranslator methodCallTranslator,
            [NotNull] IMemberTranslator memberTranslator,
            [NotNull] IRelationalTypeMapper relationalTypeMapper,
            [NotNull] IRelationalTypeMappingSource typeMappingSource)
        {
            Check.NotNull(compositeExpressionFragmentTranslator, nameof(compositeExpressionFragmentTranslator));
            Check.NotNull(methodCallTranslator, nameof(methodCallTranslator));
            Check.NotNull(memberTranslator, nameof(memberTranslator));
            Check.NotNull(relationalTypeMapper, nameof(relationalTypeMapper));
            Check.NotNull(typeMappingSource, nameof(typeMappingSource));

            CompositeExpressionFragmentTranslator = compositeExpressionFragmentTranslator;
            MethodCallTranslator = methodCallTranslator;
            MemberTranslator     = memberTranslator;
#pragma warning disable 618
            RelationalTypeMapper = relationalTypeMapper;
#pragma warning restore 618
            TypeMappingSource = typeMappingSource;
        }
 /// <summary>
 /// 初始化类<see cref="SqlServerExpressionVisitor"/>。
 /// </summary>
 /// <param name="sqlHelper">SQL操作特殊标识接口。</param>
 /// <param name="typeMapper">类型匹配。</param>
 /// <param name="memberTranslator">字段或属性转换接口。</param>
 /// <param name="methodCallTranslator">方法调用转换接口。</param>
 /// <param name="fragmentTranslator">代码段转换接口。</param>
 public SqlServerExpressionVisitor(ISqlHelper sqlHelper, ITypeMapper typeMapper, IMemberTranslator memberTranslator, IMethodCallTranslator methodCallTranslator, IExpressionFragmentTranslator fragmentTranslator)
     : base(sqlHelper, typeMapper, memberTranslator, methodCallTranslator, fragmentTranslator)
 {
 }
 /// <summary>
 ///     Clones this dependency parameter object with one service replaced.
 /// </summary>
 /// <param name="compositeExpressionFragmentTranslator"> A replacement for the current dependency of this type. </param>
 /// <returns> A new parameter object with the given service replaced. </returns>
 public SqlTranslatingExpressionVisitorDependencies With([NotNull] IExpressionFragmentTranslator compositeExpressionFragmentTranslator)
 => new SqlTranslatingExpressionVisitorDependencies(
     compositeExpressionFragmentTranslator,
     MethodCallTranslator,
     MemberTranslator,
     TypeMappingSource);
Ejemplo n.º 15
0
 public static DbContextOptionsBuilder <TContext> AddExpressionFragmentTranslator <TContext>([NotNull] this DbContextOptionsBuilder <TContext> builder,
                                                                                             [NotNull] IExpressionFragmentTranslator translator)
     where TContext : DbContext
 {
     // ReSharper disable once RedundantCast
     ((DbContextOptionsBuilder)builder).AddExpressionFragmentTranslator(translator);
     return(builder);
 }
 /// <summary>
 /// 初始化类<see cref="SqlServerExpressionVisitor"/>。
 /// </summary>
 /// <param name="sqlHelper">SQL操作特殊标识接口。</param>
 /// <param name="typeMapper">类型匹配。</param>
 /// <param name="memberTranslator">字段或属性转换接口。</param>
 /// <param name="methodCallTranslator">方法调用转换接口。</param>
 /// <param name="fragmentTranslator">代码段转换接口。</param>
 /// <param name="schemaFunc">获取前缀代理方法。</param>
 public SqlServerExpressionVisitor(ISqlHelper sqlHelper, ITypeMapper typeMapper, IMemberTranslator memberTranslator, IMethodCallTranslator methodCallTranslator, IExpressionFragmentTranslator fragmentTranslator, Func <Type, string> schemaFunc)
     : base(sqlHelper, typeMapper, memberTranslator, methodCallTranslator, fragmentTranslator, schemaFunc)
 {
 }
Ejemplo n.º 17
0
 public static DbContextOptionsBuilder AddExpressionFragmentTranslator([NotNull] this DbContextOptionsBuilder builder, [NotNull] IExpressionFragmentTranslator translator)
 {
     builder.AddOrUpdateExtension <RelationalDbContextOptionsExtension>(extension => extension.AddExpressionFragmentTranslator(translator));
     return(builder);
 }