From a7ff0b3d9f33bbb19e628258b4ccb820f75f3fb9 Mon Sep 17 00:00:00 2001 From: Nick Craver Date: Wed, 8 Feb 2017 21:22:50 -0500 Subject: [PATCH] Fix missing Firebase Async, issue #695 TODO: All of these need race love in V2, complete re-vamp. --- Dapper.Contrib/SqlMapperExtensions.Async.cs | 22 +++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/Dapper.Contrib/SqlMapperExtensions.Async.cs b/Dapper.Contrib/SqlMapperExtensions.Async.cs index f4c32068..d12af82c 100644 --- a/Dapper.Contrib/SqlMapperExtensions.Async.cs +++ b/Dapper.Contrib/SqlMapperExtensions.Async.cs @@ -429,4 +429,26 @@ public partial class SQLiteAdapter return id; } } + +public partial class FbAdapter +{ + public async Task InsertAsync(IDbConnection connection, IDbTransaction transaction, int? commandTimeout, string tableName, string columnList, string parameterList, IEnumerable keyProperties, object entityToInsert) + { + var cmd = $"insert into {tableName} ({columnList}) values ({parameterList})"; + await connection.ExecuteAsync(cmd, entityToInsert, transaction, commandTimeout); + + var propertyInfos = keyProperties as PropertyInfo[] ?? keyProperties.ToArray(); + var keyName = propertyInfos.First().Name; + var r = await connection.QueryAsync($"SELECT FIRST 1 {keyName} ID FROM {tableName} ORDER BY {keyName} DESC", transaction: transaction, commandTimeout: commandTimeout); + + var id = r.First().ID; + if (id == null) return 0; + if (!propertyInfos.Any()) return Convert.ToInt32(id); + + var idp = propertyInfos.First(); + idp.SetValue(entityToInsert, Convert.ChangeType(id, idp.PropertyType), null); + + return Convert.ToInt32(id); + } +} #endif