/// <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); }
/// <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); }
/// <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); }
/// <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); }