protected override DbCommandDefinition CreateDbCommandDefinition( DbProviderManifest providerManifest, DbCommandTree commandTree) { if (commandTree == null) throw new ArgumentNullException("commandTree"); SqlGenerator generator = null; if (commandTree is DbQueryCommandTree) generator = new SelectGenerator(); else if (commandTree is DbInsertCommandTree) generator = new InsertGenerator(); else if (commandTree is DbUpdateCommandTree) generator = new UpdateGenerator(); else if (commandTree is DbDeleteCommandTree) generator = new DeleteGenerator(); else if (commandTree is DbFunctionCommandTree) generator = new FunctionGenerator(); string sql = generator.GenerateSQL(commandTree); EFMySqlCommand cmd = new EFMySqlCommand(); cmd.CommandText = sql; if (generator is FunctionGenerator) cmd.CommandType = (generator as FunctionGenerator).CommandType; SetExpectedTypes(commandTree, cmd); EdmFunction function = null; if (commandTree is DbFunctionCommandTree) function = (commandTree as DbFunctionCommandTree).EdmFunction; // Now make sure we populate the command's parameters from the CQT's parameters: foreach (KeyValuePair<string, TypeUsage> queryParameter in commandTree.Parameters) { DbParameter parameter = cmd.CreateParameter(); parameter.ParameterName = queryParameter.Key; parameter.Direction = ParameterDirection.Input; parameter.DbType = Metadata.GetDbType(queryParameter.Value); FunctionParameter funcParam; if (function != null && function.Parameters.TryGetValue(queryParameter.Key, false, out funcParam)) { parameter.ParameterName = funcParam.Name; parameter.Direction = Metadata.ModeToDirection(funcParam.Mode); parameter.DbType = Metadata.GetDbType(funcParam.TypeUsage); } cmd.Parameters.Add(parameter); } // Now add parameters added as part of SQL gen foreach (DbParameter p in generator.Parameters) cmd.Parameters.Add(p); return CreateCommandDefinition(cmd); }
public void Delete() { var command = DeleteGenerator.Generate(new Foo { Id = 5, Foo1 = "foo1", Foo2 = "foo2" }); Assert.AreEqual("DELETE FROM Foo WHERE Id = @Id;", command); }
public async Task <int> SoftDelete <T>(CancellationToken cancellationToken, int id, SqlTransaction transaction = null) { var type = typeof(T); var query = new DeleteGenerator().GetLogicalDeleteQuery(type, id); int affectedRowsCount = 0; using (var connection = _connectionService.Create()) { using (SqlCommand cmd = connection.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = query.Main; cmd.Transaction = transaction; affectedRowsCount = await cmd.ExecuteNonQueryAsync(cancellationToken); } } return(affectedRowsCount); }
private async Task <int> SoftDelete(CancellationToken cancellationToken, object viewModel, Type type, ReflectionTable reflectionTable, SqlTransaction transaction = null) { var query = new DeleteGenerator() .GetLogicalDeleteQuery(reflectionTable, viewModel, type); int affectedRowsCount = 0; using (var connection = _connectionService.Create()) { using (SqlCommand cmd = connection.CreateCommand()) { cmd.CommandType = CommandType.Text; cmd.CommandText = query.Main; cmd.Transaction = transaction; cmd.Parameters.AddRange(query.Params.ToArray()); affectedRowsCount = await cmd.ExecuteNonQueryAsync(cancellationToken); } } return(affectedRowsCount); }
/// <summary> /// Delete a single row /// </summary> /// <typeparam name="T"></typeparam> /// <param name="connection"></param> /// <param name="param">object</param> /// <param name="table">Optional table name</param> /// <param name="commandTimeout">commandTimeout</param> /// <param name="transaction">transaction</param> /// <returns>Numbers of rows affected</returns> public static int DeleteSingle <T>(this IDbConnection connection, T param, int?commandTimeout = null, IDbTransaction transaction = null) { if (param == null) { throw new ArgumentNullException("param can not be null."); } if (param is IEnumerable) { throw new ArgumentException("param can not be a IEnumerable."); } var type = typeof(T); string cachedCommand; var value = StringCache.TryGetCommand(type, Operation.Delete, out cachedCommand); if (string.IsNullOrEmpty(cachedCommand)) { cachedCommand = DeleteGenerator.Generate(param); StringCache.Add(type, Operation.Delete, cachedCommand); } return(connection.Execute(cachedCommand, param, commandTimeout: commandTimeout, transaction: transaction)); }
protected override System.Data.Entity.Core.Common.DbCommandDefinition CreateDbCommandDefinition( System.Data.Entity.Core.Common.DbProviderManifest providerManifest, DbCommandTree commandTree) { if (commandTree == null) { throw new ArgumentNullException("commandTree"); } SqlGenerator generator = null; if (commandTree is DbQueryCommandTree) { generator = new SelectGenerator(); } else if (commandTree is DbInsertCommandTree) { generator = new InsertGenerator(); } else if (commandTree is DbUpdateCommandTree) { generator = new UpdateGenerator(); } else if (commandTree is DbDeleteCommandTree) { generator = new DeleteGenerator(); } else if (commandTree is DbFunctionCommandTree) { generator = new FunctionGenerator(); } string sql = generator.GenerateSQL(commandTree); EFMySqlCommand cmd = new EFMySqlCommand(); cmd.CommandText = sql; if (generator is FunctionGenerator) { cmd.CommandType = (generator as FunctionGenerator).CommandType; } SetExpectedTypes(commandTree, cmd); EdmFunction function = null; if (commandTree is DbFunctionCommandTree) { function = (commandTree as DbFunctionCommandTree).EdmFunction; } // Now make sure we populate the command's parameters from the CQT's parameters: foreach (KeyValuePair <string, TypeUsage> queryParameter in commandTree.Parameters) { DbParameter parameter = cmd.CreateParameter(); parameter.ParameterName = queryParameter.Key; parameter.Direction = ParameterDirection.Input; parameter.DbType = Metadata.GetDbType(queryParameter.Value); #if NET_45_OR_GREATER if (queryParameter.Value.EdmType is PrimitiveType && ((PrimitiveType)queryParameter.Value.EdmType).PrimitiveTypeKind == PrimitiveTypeKind.Geometry) { ((MySqlParameter)parameter).MySqlDbType = MySqlDbType.Geometry; } #endif FunctionParameter funcParam; if (function != null && function.Parameters.TryGetValue(queryParameter.Key, false, out funcParam)) { parameter.ParameterName = funcParam.Name; parameter.Direction = Metadata.ModeToDirection(funcParam.Mode); parameter.DbType = Metadata.GetDbType(funcParam.TypeUsage); } cmd.Parameters.Add(parameter); } // Now add parameters added as part of SQL gen foreach (DbParameter p in generator.Parameters) { cmd.Parameters.Add(p); } return(CreateCommandDefinition(cmd)); }
public void Delete() { var generator = new DeleteGenerator <CompositeIdSample>(); Assert.AreEqual("DELETE FROM `composite_id_table` WHERE `Id1` = ?p0 AND `Id2` = ?p1;", generator.GetSql()); }