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