internal string Delete(BaseModel entity) { if (entity == null) { throw new ArgumentException("The entity is null, cannot delete a null entity", nameof(entity)); } var type = entity.GetType(); var keyProperties = Cache.KeyPropertiesCache(type).ToList(); if (!keyProperties.Any()) { throw new ArgumentException("Entity must have at least one [Key] property"); } var name = Cache.GetTableName(type); var sb = new StringBuilder(); sb.Append($"delete from {name} where "); for (var i = 0; i < keyProperties.Count; i++) { var property = keyProperties.ElementAt(i); sb.Append($"{_strategy.Enclose(property.Name)} = @{property.Name}"); if (i < keyProperties.Count - 1) { sb.Append(" and "); } } return(sb.ToString()); }
internal string Insert(BaseModel entityToInsert) { var parameters = Cache.GetInsertParameters(entityToInsert, _strategy); var identityProperties = Cache.IdentityPropertiesCache(entityToInsert.GetType()); return ($"INSERT INTO {parameters.name} ({parameters.columnList}) VALUES ({parameters.parametersList}); {(identityProperties.Any() ? GetId() : "")}"); }
internal string Update(BaseModel entityToUpdate) { if (entityToUpdate.__DatabaseModelStatus != ModelStatus.Retrieved) { return(null); } if (entityToUpdate.__UpdatedProperties == null || entityToUpdate.__UpdatedProperties.Count < 1) { return(null); } var type = entityToUpdate.GetType(); var keyProperties = Cache.KeyPropertiesCache(type).ToList(); if (!keyProperties.Any()) { throw new ArgumentException("Entity must have at least one [Key] property"); } var name = Cache.GetTableName(type); var sb = new StringBuilder(); sb.Append($"update {name} set "); var allProperties = Cache.TypePropertiesCache(type); var nonIdProps = allProperties.Where(a => !keyProperties.Contains(a) && entityToUpdate.__UpdatedProperties.Contains(a.Name)).ToList(); // Only updated properties for (var i = 0; i < nonIdProps.Count; i++) { var property = nonIdProps.ElementAt(i); sb.Append($"{_strategy.Enclose(property.Name)} = @{property.Name}"); if (i < nonIdProps.Count - 1) { sb.Append(", "); } } sb.Append(" where "); for (var i = 0; i < keyProperties.Count; i++) { var property = keyProperties.ElementAt(i); sb.Append($"{_strategy.Enclose(property.Name)} = @{property.Name}"); if (i < keyProperties.Count - 1) { sb.Append(" and "); } } return(sb.ToString()); }