private SqlSaveQuery BuildInsertQuery(EntityStoreItems saveData) { StringBuilder sb = new StringBuilder(); sb.AppendLine("BEGIN TRANSACTION;"); foreach (var group in saveData.Entities.GroupBy(x => x.GetType())) { var type = group.Key; if (type.FullName.Contains("Extended")) { type = type.BaseType; } var properties = GetProperties(type); var propertyNames = string.Join(", ", properties.Select(x => x.Name)); sb.AppendLine($"INSERT INTO [{type.Name}] ({propertyNames}) VALUES "); var rows = group.Select(x => "(" + string.Join(",", GetSqlReadyPropertyValues(x, properties)) + ")"); var line = string.Join(",\r\n", rows); sb.Append(line); sb.AppendLine(";"); } sb.AppendLine("COMMIT;"); return(new SqlSaveQuery(sb.ToString())); }
private SqlSaveQuery BuildDeleteQuery(EntityStoreItems saveData) { StringBuilder sb = new StringBuilder(); sb.AppendLine("BEGIN TRANSACTION;"); foreach (var group in saveData.Entities.GroupBy(x => x.GetType())) { var type = group.Key; if (type.FullName.Contains("Extended")) { type = type.BaseType; } var idProperty = GetProperty(type, "Id"); //var properties = GetProperties(type); sb.AppendLine($"DELETE FROM [{type.Name}] WHERE "); var wheres = group.Select(entity => "(Id = " + GetSqlReadyPropertyValue(idProperty.PropertyType, idProperty.GetValue(entity)) + ")").ToList(); sb.Append(string.Join(" OR \r\n", wheres)); sb.AppendLine(";"); } sb.AppendLine("COMMIT;"); return(new SqlSaveQuery(sb.ToString())); }
public SqlSaveQuery Build(EntityStoreItems saveData) { switch (saveData.State) { case EntityState.Added: return(BuildInsertQuery(saveData)); case EntityState.Deleted: return(BuildDeleteQuery(saveData)); case EntityState.Modified: return(BuildUpdateQuery(saveData)); default: return(null); } }
private void ClearChangeSetState(EntityStoreItems items = null) { foreach (var set in entitySets) { if (items == null) { set.ClearChanges(); } else { set.Clear(items.Entities); } } }
private SqlSaveQuery BuildUpdateQuery(EntityStoreItems saveData) { StringBuilder sb = new StringBuilder(); //sb.AppendLine("BEGIN TRANSACTION;"); foreach (var entity in saveData.Entities) { var type = entity.GetType(); var properties = GetProperties(type); var idProperty = GetProperty(type, "Id"); var propertySets = GetSqlReadyPropertySet(entity, properties.Where(x => x.Name != "Id").ToArray()); sb.Append($"UPDATE [{type.Name}] "); sb.Append($"SET {string.Join(",", propertySets)} "); sb.AppendLine($"WHERE Id = {GetSqlReadyPropertyValue(idProperty.PropertyType, idProperty.GetValue(entity))};"); } //sb.AppendLine("COMMIT;"); return(new SqlSaveQuery(sb.ToString())); }
public void Test_delete() { var qb = new QueryBuilder(); List <DataModels.IEntity> entities = new List <DataModels.IEntity>(); for (var i = 0; i < 10; ++i) { entities.Add(new DataModels.User() { Created = DateTime.UtcNow, Id = Guid.Empty, Email = "*****@*****.**", DisplayName = "displayName" + i, IsAdmin = true, IsModerator = false, PasswordHash = "123123123123", UserId = i.ToString("00000"), UserName = "******" + i }); } var data = new EntityStoreItems(DataModels.EntityState.Deleted, entities); var result = qb.Build(data); }