Esempio n. 1
0
        /// <inheritdoc />
        public virtual SqlQuery GetInsert(TEntity entity)
        {
            var properties =
                (IsIdentity
                    ? SqlProperties.Where(p => !p.PropertyName.Equals(IdentitySqlProperty.PropertyName, StringComparison.OrdinalIgnoreCase))
                    : SqlProperties).ToList();

            var keyProperty = KeySqlProperties.Where(s => s.PropertyInfo.PropertyType == typeof(Guid) || s.PropertyInfo.PropertyType == typeof(Guid?)).FirstOrDefault();

            #region If There Is No Identity Property
            if (!IsIdentity && keyProperty != null)
            {
                var oldKey = keyProperty.PropertyInfo.GetValue(entity, null);
                if (oldKey == null || (Guid?)oldKey == default(Guid?))
                {
                    keyProperty.PropertyInfo.SetValue(entity, Guid.NewGuid());
                }
            }
            #endregion

            if (HasCreatedAt)
            {
                CreatedAtProperty.SetValue(entity, DateTime.UtcNow);
            }

            if (HasUpdatedAt)
            {
                UpdatedAtProperty.SetValue(entity, DateTime.UtcNow);
            }

            var query = new SqlQuery(TableName, entity, QueryType.Insert);

            query.SqlBuilder.AppendFormat("INSERT INTO {0} ({1}) VALUES ({2})", TableName, string.Join(", ", properties.Select(p => p.ColumnName)),
                                          string.Join(", ", properties.Select(p => "@" + p.PropertyName)));   // values

            if (IsIdentity)
            {
                switch (Config.SqlProvider)
                {
                case SqlProvider.MSSQL:
                    query.SqlBuilder.Append(" SELECT SCOPE_IDENTITY() AS " + IdentitySqlProperty.ColumnName);
                    break;

                case SqlProvider.MySQL:
                    query.SqlBuilder.Append("; SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER) AS " + IdentitySqlProperty.ColumnName);
                    break;

                case SqlProvider.PostgreSQL:
                    query.SqlBuilder.Append(" RETURNING " + IdentitySqlProperty.ColumnName);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            return(query);
        }
Esempio n. 2
0
        /// <inheritdoc />
        public virtual SqlQuery GetInsert(TEntity entity)
        {
            var properties =
                (IsIdentity
                    ? SqlProperties.Where(p =>
                                          (!p.PropertyName.Equals(IdentitySqlProperty.PropertyName, StringComparison.OrdinalIgnoreCase) ||
                                           (MandatoryInsertProperty != null && MandatoryInsertProperty.Any(x => x.Name == p.PropertyName))) &&
                                          !p.IgnoreCreate && !p.RowVersionProp)
                    : SqlProperties).ToList();

            if (HasCreatedAt)
            {
                CreatedAtProperty.SetValue(entity, DateTime.UtcNow);
            }

            if (HasUpdatedAt)
            {
                UpdatedAtProperty.SetValue(entity, DateTime.UtcNow);
            }

            var query = new SqlQuery(entity);

            query.SqlBuilder.AppendFormat("INSERT INTO {0} ({1}) VALUES ({2})", TableName, string.Join(", ", properties.Select(p => p.ColumnName)),
                                          string.Join(", ", properties.Select(p => "@" + p.PropertyName)));   // values

            if (IsIdentity)
            {
                switch (Config.SqlProvider)
                {
                case SqlProvider.MSSQL:
                    //query.SqlBuilder.Append(" SELECT SCOPE_IDENTITY() AS " + IdentitySqlProperty.ColumnName);
                    query.SqlBuilder.Append(" SELECT * FROM " + TableName + " WHERE " + IdentitySqlProperty.ColumnName + " = SCOPE_IDENTITY()");
                    break;

                case SqlProvider.MySQL:
                    //query.SqlBuilder.Append("; SELECT CONVERT(LAST_INSERT_ID(), SIGNED INTEGER) AS " + IdentitySqlProperty.ColumnName);
                    query.SqlBuilder.Append("; SELECT * FROM " + TableName + " WHERE " + IdentitySqlProperty.ColumnName + " = CONVERT(LAST_INSERT_ID(), SIGNED INTEGER)");
                    break;

                case SqlProvider.PostgreSQL:
                    query.SqlBuilder.Append("; SELECT * FROM " + TableName + " WHERE " + IdentitySqlProperty.ColumnName +
                                            " = CURRVAL('" + TableName + "_" + IdentitySqlProperty.ColumnName + "_seq')");
                    //query.SqlBuilder.Append(" RETURNING " + IdentitySqlProperty.ColumnName);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }

            LogSqlQuery(query);
            return(query);
        }
Esempio n. 3
0
        /// <inheritdoc />
        public virtual SqlQuery GetBulkInsert(IEnumerable <TEntity> entities)
        {
            var entitiesArray = entities as TEntity[] ?? entities.ToArray();

            if (!entitiesArray.Any())
            {
                throw new ArgumentException("collection is empty");
            }

            var entityType = entitiesArray[0].GetType();

            var properties =
                (IsIdentity
                    ? SqlProperties.Where(p =>
                                          (!p.PropertyName.Equals(IdentitySqlProperty.PropertyName, StringComparison.OrdinalIgnoreCase) ||
                                           (MandatoryInsertProperty != null && MandatoryInsertProperty.Any(x => x.Name == p.PropertyName))) &&
                                          !p.IgnoreCreate && !p.RowVersionProp)
                    : SqlProperties).ToList();

            var query = new SqlQuery();

            var values     = new List <string>();
            var parameters = new Dictionary <string, object>();

            for (var i = 0; i < entitiesArray.Length; i++)
            {
                if (HasCreatedAt)
                {
                    CreatedAtProperty.SetValue(entitiesArray[i], DateTime.UtcNow);
                }

                if (HasUpdatedAt)
                {
                    UpdatedAtProperty.SetValue(entitiesArray[i], DateTime.UtcNow);
                }

                foreach (var property in properties)
                {
                    // ReSharper disable once PossibleNullReferenceException
                    parameters.Add(property.PropertyName + i, entityType.GetProperty(property.PropertyName).GetValue(entitiesArray[i], null));
                }

                values.Add(string.Format("({0})", string.Join(", ", properties.Select(p => "@" + p.PropertyName + i))));
            }

            query.SqlBuilder.AppendFormat("INSERT INTO {0} ({1}) VALUES {2}", TableName, string.Join(", ", properties.Select(p => p.ColumnName)), string.Join(",", values)); // values

            query.SetParam(parameters);

            LogSqlQuery(query);
            return(query);
        }
Esempio n. 4
0
        /// <inheritdoc />
        public virtual SqlQuery GetBulkInsert(IEnumerable <TEntity> entities)
        {
            var entitiesArray = entities as TEntity[] ?? entities.ToArray();

            if (!entitiesArray.Any())
            {
                throw new ArgumentException("collection is empty");
            }

            var entityType = entitiesArray[0].GetType();

            var properties =
                (IsIdentity
                    ? SqlProperties.Where(p => !p.PropertyName.Equals(IdentitySqlProperty.PropertyName, StringComparison.OrdinalIgnoreCase))
                    : SqlProperties).ToList();

            var query = new SqlQuery(TableName, QueryType.Insert);

            var values      = new List <string>();
            var parameters  = new Dictionary <string, object>();
            var keyProperty = KeySqlProperties.Where(s => s.PropertyInfo.PropertyType == typeof(Guid) || s.PropertyInfo.PropertyType == typeof(Guid?)).FirstOrDefault();

            for (var i = 0; i < entitiesArray.Length; i++)
            {
                #region If There Is No Identity Property
                if (!IsIdentity && keyProperty != null)
                {
                    var oldKey = keyProperty.PropertyInfo.GetValue(entitiesArray[i], null);
                    if (oldKey == null || (Guid?)oldKey == default(Guid?))
                    {
                        keyProperty.PropertyInfo.SetValue(entitiesArray[i], Guid.NewGuid());
                    }
                }
                #endregion

                if (HasCreatedAt)
                {
                    CreatedAtProperty.SetValue(entitiesArray[i], DateTime.UtcNow);
                }

                if (HasUpdatedAt)
                {
                    UpdatedAtProperty.SetValue(entitiesArray[i], DateTime.UtcNow);
                }

                foreach (var property in properties)
                {
                    // ReSharper disable once PossibleNullReferenceException
                    parameters.Add(property.PropertyName + i, entityType.GetProperty(property.PropertyName).GetValue(entitiesArray[i], null));
                }

                values.Add(string.Format("({0})", string.Join(", ", properties.Select(p => "@" + p.PropertyName + i))));
            }

            query.SqlBuilder.AppendFormat("INSERT INTO {0} ({1}) VALUES {2}", TableName, string.Join(", ", properties.Select(p => p.ColumnName)), string.Join(",", values)); // values

            query.SetParam(parameters);
            query.SetTable(TableName);

            return(query);
        }