private DbCommand GenerateUpdateCommand(object entity, IEnumerable <string> fieldsToUpdate) { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } if (fieldsToUpdate == null) { throw new ArgumentNullException(nameof(fieldsToUpdate)); } Type entityType = entity.GetType(); EntityMetadata entityMetadata = entityType.GetEntityMetadata(); string baseTable = entityMetadata.BaseTableName; if (string.IsNullOrEmpty(baseTable)) { throw new InvalidOperationException("cannot generate update command for entity " + entityType.Name + " because it does not have a base table"); } if (entityMetadata.PrimaryKeyPropertyNames.Count == 0) { throw new InvalidOperationException("cannot generate update command for entity " + entityType.Name + " because it does not have a primary key"); } string fullTableName = entityMetadata.GetFullTableName(this.DataService.EntityLiteProvider.DefaultSchema, this.DataService.EntityLiteProvider.StartQuote, this.DataService.EntityLiteProvider.EndQuote); IPropertyGetterDictionary getters = PropertyHelper.GetPropertyGetters(entityType); DbCommand cmd = DataService.EntityLiteProvider.CreateCommand(); StringBuilder commandText = new StringBuilder(); commandText.Append("\nUPDATE ").Append(fullTableName); bool hasEntityRowVersionField = false; GenerateUpdateSetClause(entity, fieldsToUpdate, entityMetadata, getters, cmd, commandText, ref hasEntityRowVersionField); GenerateUpdateWhereClauseWithPrimaryKeyAndEntityRowVersion(entity, entityMetadata, getters, cmd, commandText, hasEntityRowVersionField); if (this.DataService.IsPreventingSuperfluousUpdatesEnabled) { AddModifiedFieldsPredicateToToUpdateWhereClause(fieldsToUpdate, entityMetadata, commandText); } cmd.CommandText = commandText.ToString(); return(cmd); }
private DbCommand GenerateDeleteCommand(object entity) { try { if (entity == null) { throw new ArgumentNullException(nameof(entity)); } Type entityType = entity.GetType(); EntityMetadata entityMetadata = entityType.GetEntityMetadata(); if (entityMetadata == null) { throw new InvalidOperationException("cannot generate delete command for entity " + entityType.Name + " because it does not have metadata"); } string baseTable = entityMetadata.BaseTableName; if (string.IsNullOrEmpty(baseTable)) { throw new InvalidOperationException("cannot generate delete command for entity " + entityType.Name + " because it does not have a base table"); } if (entityMetadata.PrimaryKeyPropertyNames.Count == 0) { throw new InvalidOperationException("cannot generate delete command for entity " + entityType.Name + " because it does not have a primary key"); } IPropertyGetterDictionary getters = PropertyHelper.GetPropertyGetters(entityType); DbCommand cmd = DataService.EntityLiteProvider.CreateCommand(); StringBuilder commandText = new StringBuilder(); string fullTableName = entityMetadata.GetFullTableName(this.DataService.EntityLiteProvider.DefaultSchema, this.DataService.EntityLiteProvider.StartQuote, this.DataService.EntityLiteProvider.EndQuote); commandText.Append("\nDELETE FROM ").Append(fullTableName); bool firstTime = true; foreach (string fieldName in entityMetadata.PrimaryKeyPropertyNames) { var property = entityMetadata.Properties[fieldName]; SqlFieldAttribute field = property.SqlField; string parameterName; IDbDataParameter param = CreateParameter(property, fieldName, out parameterName); SetValueToCommandParameter(entity, getters, fieldName, param); cmd.Parameters.Add(param); if (firstTime) { commandText.Append("\nWHERE\n "); firstTime = false; } else { commandText.Append("\n AND "); } commandText.Append(this.DataService.EntityLiteProvider.StartQuote + field.BaseColumnName + this.DataService.EntityLiteProvider.EndQuote).Append(" = ").Append(parameterName); } cmd.CommandText = commandText.ToString(); return(cmd); } catch (Exception ex) { if (entity == null) { Log?.LogError(ex, "Error generating delete command"); } else { string primaryKey = entity.GetPrimaryKey().ToListString() ?? "'no id'"; string message = string.Format(CultureInfo.InvariantCulture, "Error generating delete command for entity of type {0} with primary key: {1}", entity.GetType().Name, primaryKey); #pragma warning disable CA2254 // Template should be a static expression Log?.LogError(ex, message); #pragma warning restore CA2254 // Template should be a static expression } throw; } }