using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; namespace Dapper { public abstract class SqlCompactDatabase : Database where TDatabase : Database, new() { public class SqlCompactTable : Table { public SqlCompactTable(Database database, string likelyTableName) : base(database, likelyTableName) { } /// /// Insert a row into the db /// /// Either DynamicParameters or an anonymous type or concrete type /// public override int? Insert(dynamic data) { var o = (object)data; List paramNames = GetParamNames(o); paramNames.Remove("Id"); string cols = string.Join(",", paramNames); string colsParams = string.Join(",", paramNames.Select(p => "@" + p)); var sql = "insert " + TableName + " (" + cols + ") values (" + colsParams + ")"; if (database.Execute(sql, o) != 1) { return null; } return (int)database.Query("SELECT @@IDENTITY AS LastInsertedId").Single(); } } public static TDatabase Init(DbConnection connection) { TDatabase db = new TDatabase(); db.InitDatabase(connection, 0); return db; } internal override Action CreateTableConstructorForTable() { return CreateTableConstructor(typeof(SqlCompactTable<>)); } } }