Exemple #1
0
        public static void Delete(this DbConnectionProvider connectionProvider, IEnumerable <object> datas)
        {
            if (connectionProvider == null)
            {
                throw new ArgumentNullException(nameof(connectionProvider));
            }
            if (datas == null)
            {
                throw new ArgumentNullException(nameof(datas));
            }

            Type type;

            using (var e = datas.GetEnumerator())
            {
                if (!e.MoveNext())
                {
                    return;
                }
                type = e.Current.GetType();
            }
            var schema = EntitySchemaManager.GetSchema(type);

            if (schema == null)
            {
                throw new InvalidConstraintException($"EntityType:{type} schema not found.");
            }
            if (schema.AccessLevel == AccessLevel.ReadOnly)
            {
                throw new ArgumentException($"Type:[{schema.EntityType}] read only");
            }
            var validColumn = schema.Columns;
            var keyColumn   = validColumn.FirstOrDefault(p => p.IsPrimary);

            if (keyColumn == null)
            {
                throw new ArgumentException($"Type:[{schema.EntityType}] not found parimary");
            }
            var dbCommand = connectionProvider.CreateCommand(schema.Name, DbCommandMode.Delete);

            foreach (var data in datas)
            {
                var value = keyColumn.GetValue(data);
                if (value == null)
                {
                    throw new InvalidOperationException($"schema:{schema.EntityType} primary:{keyColumn.Name} should not be null");
                }

                var parameter = connectionProvider.CreateParameter($"@{keyColumn.Name}", value);
                dbCommand.AddParameter(parameter);
                dbCommand.Condition = SqlExpression.Equal(SqlExpression.Member(keyColumn.Name), SqlExpression.Paramter(keyColumn.Name));

                var commandText = dbCommand.CommandText;
                connectionProvider.ExecuteNonQuery(commandText, parameters: dbCommand.Parameters.ToArray());
                dbCommand.ClearParameter();
            }
        }
Exemple #2
0
        public static void Insert(this DbConnectionProvider connectionProvider, IEnumerable <object> datas)
        {
            if (connectionProvider == null)
            {
                throw new ArgumentNullException(nameof(connectionProvider));
            }
            if (datas == null)
            {
                throw new ArgumentNullException(nameof(datas));
            }

            Type type;

            using (var e = datas.GetEnumerator())
            {
                if (!e.MoveNext())
                {
                    return;
                }
                type = e.Current.GetType();
            }
            var schema = EntitySchemaManager.GetSchema(type);

            if (schema == null)
            {
                throw new InvalidConstraintException($"EntityType:{type} schema not found.");
            }
            if (schema.AccessLevel == AccessLevel.ReadOnly)
            {
                throw new ArgumentException($"Type:[{schema.EntityType}] read only");
            }
            var columns       = schema.Columns;
            var validColumn   = columns.Where(p => !p.IsIdentity).ToArray();
            var commandStruct = connectionProvider.CreateCommand(schema.Name, DbCommandMode.Insert, validColumn.Select(p => SqlExpression.Member(p.Name)));

            foreach (var data in datas)
            {
                foreach (var column in validColumn)
                {
                    var value = column.GetValue(data) ?? DBNull.Value;
                    commandStruct.AddParameter(column.Name, value);
                }

                connectionProvider.ExecuteNonQuery(commandStruct);
                commandStruct.ClearParameter();
            }
        }
Exemple #3
0
        public static List <T> Load <T>(DbConnectionProvider connectionProvider, Expression <Func <T, bool> > condition = null)
            where T : RowAdapter, new()
        {
            if (connectionProvider == null)
            {
                throw new ArgumentNullException(nameof(connectionProvider));
            }

            var view          = EntitySchemaManager.GetSchema <T>(true);
            var validColumns  = view.Columns.Select(p => SqlExpression.Member(p.Name));
            var commandStruct = connectionProvider.CreateCommand <T>(view.Name, DbCommandMode.Select, validColumns);

            if (condition != null)
            {
                commandStruct.Where(condition);
            }
            return(Load <T>(connectionProvider, commandStruct));
        }
Exemple #4
0
        public static void Update(this DbConnectionProvider connectionProvider, IEnumerable <object> datas)
        {
            if (connectionProvider == null)
            {
                throw new ArgumentNullException(nameof(connectionProvider));
            }
            if (datas == null)
            {
                throw new ArgumentNullException(nameof(datas));
            }

            Type type;

            using (var e = datas.GetEnumerator())
            {
                if (!e.MoveNext())
                {
                    return;
                }
                type = e.Current.GetType();
            }
            var schema = EntitySchemaManager.GetSchema(type);

            if (schema == null)
            {
                throw new InvalidConstraintException($"EntityType:{type} schema not found.");
            }
            if (schema.AccessLevel == AccessLevel.ReadOnly)
            {
                throw new InvalidConstraintException($"Type:[{schema.EntityType}] read only");
            }
            var columns   = schema.Columns;
            var keyColumn = columns.FirstOrDefault(p => p.IsPrimary);

            if (keyColumn == null)
            {
                throw new InvalidConstraintException($"Type:[{schema.EntityType}] not found parimary");
            }
            var aryColumn = columns.Where(p => !p.IsIdentity).Select(p => SqlExpression.Member(p.Name)).ToArray();
            var dbCommand = connectionProvider.CreateCommand(schema.Name, DbCommandMode.Update, aryColumn);

            foreach (var data in datas)
            {
                foreach (var column in columns)
                {
                    if (column.IsIdentity && !column.IsPrimary)
                    {
                        continue;
                    }

                    var val       = column.GetValue(data) ?? DBNull.Value;
                    var parameter = connectionProvider.CreateParameter(column.Name, val);
                    dbCommand.AddParameter(parameter);
                }

                dbCommand.Condition = SqlExpression.Equal(SqlExpression.Member(keyColumn.Name), SqlExpression.Paramter(keyColumn.Name));
                var strComm = dbCommand.CommandText;
                connectionProvider.ExecuteNonQuery(strComm, parameters: dbCommand.Parameters.ToArray());
                dbCommand.ClearParameter();
            }
        }