Example #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();
            }
        }
Example #2
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();
            }
        }