Beispiel #1
0
        internal override string GetInsertCommand(InsertExpression expression)
        {
            StringBuilder stringBuilder = new StringBuilder();
            StringBuilder columnString  = new StringBuilder();
            StringBuilder valueString   = new StringBuilder();

            foreach (var setting in expression.SettingList)
            {
                columnString.Append(setting.ColumnName);
                if (setting.Value.GetType() == DateTime.Now.GetType())
                {
                    valueString.Append($"'{((DateTime)setting.Value).ToString("yyyy-MM-dd")}'");
                }
                else
                {
                    valueString.Append($"'{setting.Value}'");
                }
                if (setting != expression.SettingList.Last())
                {
                    columnString.Append(",");
                    valueString.Append(",");
                }
            }
            stringBuilder.Append($"INSERT INTO {expression.TableName} ({columnString.ToString()}) VALUES ({valueString.ToString()});");
            return(stringBuilder.ToString());
        }
Beispiel #2
0
        public virtual void InsertMigrationFingerPrint(string id, string description)
        {
            var cmd = new InsertExpression(this.MigrationTableName)
                      .Parameter("Id", id)
                      .Parameter("Description", description)
                      .FunctionParameter("Executed", FunctionType.CurrentDateTime);

            this.DatabaseContext.InsertRow(cmd);
        }
Beispiel #3
0
        protected InsertExpression CreateInsertExpression(object entity, TableAttribute table, IColumnInfoCollection columns)
        {
            var values = new ValuesExpression();
            var insert = new InsertExpression(new TableExpression(table))
            {
                Values = values
            };
            var type = entity.GetType();

            if (type.Module.ScopeName == "FooBar")
            {
                type = type.BaseType;
            }
            var discriminator = columns.SingleOrDefault(c => c.IsDiscriminatorColumn);

            if (discriminator != null)
            {
                values.AddColumn(discriminator.ToColumnExpression());
                values.AddValue(Expression.Constant(type.FullName));
            }

            foreach (var pi in type.GetProperties(BindingFlags.Public | BindingFlags.Instance))
            {
                try
                {
                    var column = columns.SingleOrDefault(c => c.DescribesProperty(pi));
                    if (column == null)
                    {
                        continue;
                    }

                    var value = pi.GetValue(entity);

                    if (column.IsIdentity)
                    {
                        var defaultValue = Activator.CreateInstance(pi.PropertyType);
                        if (!value.Equals(defaultValue))
                        {
                            insert.IsIdentityInsertEnabled = true;
                        }
                        else
                        {
                            continue;
                        }
                    }

                    values.AddColumn(column.ToColumnExpression());
                    values.AddValue(Expression.Constant(value));
                }
                catch (Exception ex)
                {
                    Debugger.Break();
                }
            }
            return(insert);
        }
Beispiel #4
0
        public virtual void CopyValues(TableAttribute fromTable, TableAttribute toTable, IEnumerable <ColumnInfo> columns)
        {
            var select = new SelectExpression(new TableExpression(fromTable));
            var insert = new InsertExpression(new TableExpression(toTable))
            {
                Select = select
            };

            foreach (var column in columns)
            {
                if (column.IsIdentity)
                {
                    insert.IsIdentityInsertEnabled = true;
                }
                select.AddSelection(column.ToColumnExpression());
            }
            ExecuteNonQuery(insert);
        }
        public virtual DatabaseCommand GenerateInsert(InsertExpression model)
        {
            string names  = string.Join(",", model.Parameters.Select(p => p.Name));
            string values = string.Join(",", model.Parameters.Select(p =>
                                                                     !p.IsFunction?"@" + p.Name:this.TypeMapper.MapFunctionType(p.Function)));
            string cmd = string.Format(InsertDataFormat,
                                       model.TableName,
                                       names,
                                       values);
            DatabaseCommand ret = new DatabaseCommand(cmd);

            foreach (var p in model.Parameters)
            {
                if (!p.IsFunction)
                {
                    ret.Parameters.Add(p.Name, p.Value);
                }
            }
            return(ret);
        }
        /// <summary>
        /// Inserts obejcts without reading them into the cache
        /// only used for manytomany table entries
        /// </summary>
        /// <param name="stmt"></param>
        /// <typeparam name="T"></typeparam>
        public void InsertStatement <T>(InsertExpression <T> stmt)
        {
            var conn = _connection;

            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            using var cmd   = conn.CreateCommand();
            cmd.CommandText = stmt.AsSqlString();
            cmd.Transaction = _transaction;

            foreach (var(type, id, value) in stmt.GetParameters())
            {
                var param = cmd.CreateParameter();
                param.Value         = value ?? DBNull.Value;
                param.DbType        = type;
                param.ParameterName = id;
                cmd.Parameters.Add(param);
            }
            using var result = cmd.ExecuteReader();
        }
        /// <summary>
        /// Executes the given InsertStatement and maps returned values back into entities
        /// objects created like this are add into the cache as managed entities
        /// </summary>
        /// <param name="stmt"></param>
        /// <typeparam name="TEntity"></typeparam>
        /// <exception cref="Exception"></exception>
        public void Insert <TEntity>(InsertExpression <TEntity> stmt)
        {
            var conn = _connection;

            if (conn.State != ConnectionState.Open)
            {
                conn.Open();
            }
            using var cmd   = conn.CreateCommand();
            cmd.CommandText = stmt.AsSqlString();
            cmd.Transaction = _transaction;
            // set all prepared stmt placeholders
            foreach (var(type, id, value) in stmt.GetParameters())
            {
                var param = cmd.CreateParameter();
                param.Value         = value ?? DBNull.Value;
                param.DbType        = type;
                param.ParameterName = id;
                cmd.Parameters.Add(param);
            }

            using var reader = new CachedDataReader(
                      _ctx.Cache,
                      stmt.Entity,
                      cmd.ExecuteReader(),
                      _ctx
                      );
            //reader reads objects into Cache
            var entries = reader
                          .ReadAllInto(stmt.InsertedObjects.Cast <object>())
                          .ToList();

            //register lazyloaders on newly created objects
            foreach (var cacheEntry in entries)
            {
                RegisterLazyLoader(cacheEntry.Object, cacheEntry.Entity, cacheEntry);
            }
        }
Beispiel #8
0
 public void AddManyToMany(Entity manyToManyEntity, InsertExpression <Dictionary <string, object> > manyToManyInsert)
 {
     _newManyToManys.GetOrInsert(manyToManyEntity, new List <InsertExpression <Dictionary <string, object> > >())
     .Add(manyToManyInsert);
 }
 public virtual int InsertRow(InsertExpression model)
 {
     return(exec(Factory.GenerateInsert(model)));
 }
        public InsertExpression InsertRow(string tableName)
        {
            var insert = new InsertExpression(tableName);

            return(insert);
        }
Beispiel #11
0
 internal abstract string GetInsertCommand(InsertExpression expression);