Ejemplo n.º 1
0
        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()));
        }
Ejemplo n.º 2
0
        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()));
        }
Ejemplo n.º 3
0
        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);
            }
        }
Ejemplo n.º 4
0
 private void ClearChangeSetState(EntityStoreItems items = null)
 {
     foreach (var set in entitySets)
     {
         if (items == null)
         {
             set.ClearChanges();
         }
         else
         {
             set.Clear(items.Entities);
         }
     }
 }
Ejemplo n.º 5
0
        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()));
        }
Ejemplo n.º 6
0
        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);
        }