Beispiel #1
0
        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());
        }
Beispiel #2
0
        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() : "")}");
        }
Beispiel #3
0
        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());
        }