/// <summary> /// /// </summary> /// <param name="entityType"></param> /// <param name="connection"></param> /// <param name="tableName"></param> /// <param name="qualifiers"></param> /// <param name="fields"></param> /// <param name="hints"></param> /// <param name="transaction"></param> /// <param name="statementBuilder"></param> /// <param name="cancellationToken"></param> /// <returns></returns> public static async Task <MergeExecutionContext> CreateAsync(Type entityType, IDbConnection connection, string tableName, IEnumerable <Field> qualifiers, IEnumerable <Field> fields, string hints = null, IDbTransaction transaction = null, IStatementBuilder statementBuilder = null, CancellationToken cancellationToken = default) { var key = GetKey(entityType, tableName, qualifiers, fields, hints); // Get from cache var context = MergeExecutionContextCache.Get(key); if (context != null) { return(context); } // Create var dbFields = await DbFieldCache.GetAsync(connection, tableName, transaction, cancellationToken); var request = new MergeRequest(tableName, connection, transaction, fields, qualifiers, hints, statementBuilder); var commandText = await CommandTextCache.GetMergeTextAsync(request, cancellationToken); // Call context = CreateInternal(entityType, connection, dbFields, tableName, fields, commandText); // Add to cache MergeExecutionContextCache.Add(key, context); // Return return(context); }
/// <summary> /// /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="connection"></param> /// <param name="tableName"></param> /// <param name="qualifiers"></param> /// <param name="fields"></param> /// <param name="hints"></param> /// <param name="transaction"></param> /// <param name="statementBuilder"></param> /// <returns></returns> public static MergeExecutionContext <TEntity> Create <TEntity>(IDbConnection connection, string tableName, IEnumerable <Field> qualifiers, IEnumerable <Field> fields, string hints = null, IDbTransaction transaction = null, IStatementBuilder statementBuilder = null) where TEntity : class { var key = GetKey <TEntity>(tableName, qualifiers, fields, hints); // Get from cache var context = MergeExecutionContextCache.Get <TEntity>(key); if (context != null) { return(context); } // Create var dbFields = DbFieldCache.Get(connection, tableName, transaction); var request = new MergeRequest(tableName, connection, transaction, fields, qualifiers, hints, statementBuilder); var commandText = CommandTextCache.GetMergeText(request); // Call context = CreateInternal <TEntity>(connection, dbFields, tableName, fields, commandText); // Add to cache MergeExecutionContextCache.Add <TEntity>(key, context); // Return return(context); }
/// <summary> /// /// </summary> /// <typeparam name="TEntity"></typeparam> /// <param name="connection"></param> /// <param name="tableName"></param> /// <param name="qualifiers"></param> /// <param name="fields"></param> /// <param name="hints"></param> /// <param name="transaction"></param> /// <param name="statementBuilder"></param> /// <param name="skipIdentityCheck"></param> /// <returns></returns> public static MergeExecutionContext <TEntity> Create <TEntity>(IDbConnection connection, string tableName, IEnumerable <Field> qualifiers, IEnumerable <Field> fields, string hints = null, IDbTransaction transaction = null, IStatementBuilder statementBuilder = null, bool skipIdentityCheck = false) where TEntity : class { var key = GetKey <TEntity>(tableName, qualifiers, fields, hints); // Get from cache var context = MergeExecutionContextCache.Get <TEntity>(key); if (context != null) { return(context); } // Create var dbFields = DbFieldCache.Get(connection, tableName, transaction); context = CreateInternal <TEntity>(connection, dbFields, tableName, qualifiers, fields, hints, transaction, statementBuilder, skipIdentityCheck); // Add to cache MergeExecutionContextCache.Add <TEntity>(key, context); // Return return(context); }