public override async Task ExecuteAsync(DbConnection connection, DbTransaction transaction) { var dialect = SqlDialectFactory.For(connection); var type = Index.GetType(); var documentTable = CollectionHelper.Current.GetPrefixedName(Store.DocumentTable); if (Index is MapIndex) { var sql = Inserts(type) + $" {dialect.IdentitySelectString} id"; Index.Id = await connection.ExecuteScalarAsync<int>(sql, Index, transaction); await connection.ExecuteAsync($"update [{_tablePrefix}{type.Name}] set DocumentId = @mapid where Id = @Id", new { mapid = Index.GetAddedDocuments().Single().Id, Id = Index.Id }, transaction); } else { var reduceIndex = Index as ReduceIndex; var sql = Inserts(type) + $"; {dialect.IdentitySelectString} id"; Index.Id = await connection.ExecuteScalarAsync<int>(sql, Index, transaction); var bridgeTableName = type.Name + "_" + documentTable; var columnList = $"[{type.Name}Id], [DocumentId]"; var parameterList = $"@Id, @DocumentId"; var bridgeSql = $"insert into [{_tablePrefix}{bridgeTableName}] ({columnList}) values ({parameterList});"; await connection.ExecuteAsync(bridgeSql, _addedDocumentIds.Select(x => new { DocumentId = x, Id = Index.Id }), transaction); } }
public override async Task ExecuteAsync(DbConnection connection, DbTransaction transaction) { var dialect = SqlDialectFactory.For(connection); var insertCmd = $"insert into [{_tablePrefix}Document] ([Id], [Type]) values (@Id, @Type);"; await connection.ExecuteScalarAsync<int>(insertCmd, Document, transaction); }