/// <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
            {
            }
        }
Esempio n. 8
0
        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());
        }