public virtual void InsertCommand(IDbCommand command, object entity)
{
if (command == null) throw new ArgumentNullException("command");
if (entity == null) throw new ArgumentNullException("entity");
var columns = "";
var values = "";
foreach (var key in _keys)
{
if (key.IsAutoIncrement)
continue;
var value = key.GetValue(entity);
if (value == null || (TreatZeroAsNullForKeys && value.Equals(0)))
continue;
columns += string.Format("{0}, ", key.ColumnName);
values += string.Format("@{0}, ", key.PropertyName);
command.AddParameter(key.PropertyName, value);
}
foreach (var prop in _values)
{
if (!prop.CanRead)
continue;
var value = prop.GetValue(entity);
columns += string.Format("{0}, ", prop.ColumnName);
values += string.Format("@{0}, ", prop.PropertyName);
command.AddParameter(prop.PropertyName, value ?? DBNull.Value);
}
if (command.Parameters.Count == 0)
throw new DataException("No values were added to the query for " + entity);
command.CommandText = string.Format("INSERT INTO {0} ({1}) VALUES({2})",
TableName,
columns.Remove(columns.Length - 2, 2),
values.Remove(values.Length - 2, 2));
}