/// <summary>
/// Performs an SQL Insert
/// </summary>
/// <param name="tableName">The name of the table to insert into</param>
/// <param name="primaryKeyName">The name of the primary key column of the table</param>
/// <param name="autoIncrement">True if the primary key is automatically allocated by the DB</param>
/// <param name="poco">The POCO object that specifies the column values to be inserted</param>
/// <returns>The auto allocated primary key of the new record, or null for non-auto-increment tables</returns>
/// <remarks>Inserts a poco into a table. If the poco has a property with the same name
/// as the primary key the id of the new record is assigned to it. Either way,
/// the new id is returned.</remarks>
public virtual Task <object> InsertAsync <T>(string tableName, string primaryKeyName, bool autoIncrement, T poco)
{
var pd = PocoDataFactory.ForObject(poco, primaryKeyName, autoIncrement);
return(InsertAsyncImp(pd, tableName, primaryKeyName, autoIncrement, poco, false));
}