/// <summary> /// Create a list of new entities /// </summary> /// <param name="entities">List of entities</param> /// <returns>Task</returns> public virtual async Task CreateManyAsync(IEnumerable <TEntity> entities) { var insertColumns = EntityColumns.Where(c => c != IdPropertyName); var insertCommand = $@" INSERT INTO {TableName} ({string.Join(",", insertColumns)}) VALUES (@{string.Join(",@", insertColumns)})"; await Connection.ExecuteAsync(insertCommand, entities.ToList()); }
/// <summary> /// Find the Id property of the entity type looking for properties with name Id or (entity type name)Id /// </summary> /// <returns>Id property name or null if none could befound</returns> protected static string FindIdProperty() { var idProperty = EntityColumns .FirstOrDefault(c => c.ToLower() == $"{EntityTypeName.ToLower()}id"); if (idProperty == null) { idProperty = EntityColumns .FirstOrDefault(c => c.ToLower() == "id"); } return(idProperty); }
/// <summary> /// Update an existing entity /// </summary> /// <param name="entity">Entity</param> /// <returns>Task</returns> public virtual async Task UpdateAsync(TEntity entity) { if (Connection.State != ConnectionState.Open) { Connection.Open(); } var parameters = EntityColumns.Select(name => $"@{name}=@{name}").ToList(); await Connection.ExecuteAsync( $"EXEC Update{EntityTypeName} {string.Join(",", parameters)}", entity); }
/// <summary> /// Create a new entity /// </summary> /// <param name="entity">Entity</param> /// <returns>Task</returns> public virtual async Task CreateAsync(TEntity entity) { var insertColumns = EntityColumns.Where(c => !ExcludeProperty.Contains(c)); var insertQuery = $@"INSERT INTO {TableName} ({string.Join(",", insertColumns)}) VALUES (@{string.Join(",@", insertColumns)}); {LastRowIdCommand}"; IEnumerable <Guid?> result = await Connection.QueryAsync <Guid?>(insertQuery, entity); //EntityType.GetProperty(IdPropertyName)? // .SetValue(entity, result.First()); }
/// <summary> /// Create a list of new entities /// </summary> /// <param name="entities">List of entities</param> /// <returns>Task</returns> public virtual async Task CreateManyAsync(IEnumerable <TEntity> entities) { if (Connection.State != ConnectionState.Open) { Connection.Open(); } var parameters = EntityColumns .Where(c => c != IdPropertyName) .Select(c => "@" + c).ToList(); await Connection.ExecuteAsync( $"EXEC Create{EntityTypeName} {string.Join(",", parameters)}", entities); }
/// <summary> /// Update an existing entity /// </summary> /// <param name="entity">Entity</param> /// <returns>Task</returns> public virtual async Task UpdateAsync(TEntity entity) { if (Connection.State != ConnectionState.Open) { Connection.Open(); } var columns = EntityColumns.Where(s => s != IdPropertyName); var parameters = columns.Select(name => name + "=@" + name).ToList(); var updateQuery = $@"UPDATE {TableName} SET {string.Join(",", parameters)} WHERE {IdPropertyName}=@{IdPropertyName}"; await Connection.ExecuteAsync(updateQuery, entity); }
/// <summary> /// Create a list of new entities /// </summary> /// <param name="entities">List of entities</param> /// <returns>Task</returns> public virtual async Task CreateManyAsync(IEnumerable <TEntity> entities) { try { var insertColumns = EntityColumns.Where(c => !ExcludeProperty.Contains(c)); var insertCommand = $@"INSERT INTO {TableName} ({string.Join(",", insertColumns)}) VALUES (@{string.Join(",@", insertColumns)})"; //IEnumerable<Guid?> result = await Connection.QueryAsync<Guid?>(insertCommand, entities); await Connection.ExecuteAsync(insertCommand, entities.ToList()); } catch { } }
private void InitialiseEntityColumns(AttributeWrapper attributes) { foreach (ColumnAttribute columnAttribute in attributes.ColumnAttributes) { EntityColumn column = new EntityColumn(columnAttribute, this); DataColumn dataColumn = column.DataColumn; if (attributes.ColumnForeignKeys.ContainsKey(columnAttribute)) { ForeignKeyAttribute key = attributes.ColumnForeignKeys[columnAttribute]; column.ForeignKeyTableMapping = key.ForeignTable; column.KeyType = (byte)KeyTypes.ForeignKey; foreignKeyColumns.Add(column); foreignKeyColumnsDict.Add(column.ForeignKeyTableMapping, column); } if (attributes.ColumnPrimaryKeys.ContainsKey(columnAttribute)) { PrimaryKeyAttribute key = attributes.ColumnPrimaryKeys[columnAttribute]; column.KeyType = (byte)KeyTypes.PrimaryKey; primaryKeyColumn = column; } /* * Bulk inserts can only be performed on data that is mapped to a physical column in the database. These are * represented by instances of the EntityColumn class, and contain specific methods which determine key type * etc. */ if (!column.IsPrimaryKey()) { DataTable.Columns.Add(dataColumn); } EntityColumns.Add(column); Columns.Add(column); } }
/// <summary> /// Create a new entity /// </summary> /// <param name="entity">Entity</param> /// <returns>Task</returns> public virtual async Task CreateAsync(TEntity entity) { if (Connection.State != ConnectionState.Open) { Connection.Open(); } var parameters = EntityColumns .Where(c => c != IdPropertyName) .Select(c => $"@{c}=@{c}").ToList(); var createCommand = $"EXEC Create{EntityTypeName} {string.Join(",", parameters)}"; IEnumerable <int> result = await Connection.QueryAsync <int>( createCommand, entity); EntityType.GetProperty(IdPropertyName)? .SetValue(entity, result.First()); }