diff --git a/src/Infrastructure.EntityFramework/Dirt/Repositories/EventRepository.cs b/src/Infrastructure.EntityFramework/Dirt/Repositories/EventRepository.cs index 0a79782b91e2..e058bd344854 100644 --- a/src/Infrastructure.EntityFramework/Dirt/Repositories/EventRepository.cs +++ b/src/Infrastructure.EntityFramework/Dirt/Repositories/EventRepository.cs @@ -48,7 +48,17 @@ public async Task CreateManyAsync(IEnumerable entities) var tableEvents = entities.Select(e => e as Core.Entities.Event ?? new Core.Entities.Event(e)); var entityEvents = Mapper.Map>(tableEvents); entityEvents.ForEach(e => e.SetNewId()); - await dbContext.BulkCopyAsync(entityEvents); + // SQLite does not support LinqToDB BulkCopy; use EF Core directly instead + if (dbContext.Database.IsSqlite()) + { + await dbContext.AddRangeAsync(entityEvents); + await dbContext.SaveChangesAsync(); + } + else + { + await dbContext.BulkCopyAsync(entityEvents); + await dbContext.SaveChangesAsync(); + } } } diff --git a/src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs b/src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs index 7b67e4c620fc..6bb024c1923d 100644 --- a/src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs +++ b/src/Infrastructure.EntityFramework/Vault/Repositories/CipherRepository.cs @@ -159,9 +159,18 @@ public async Task CreateAsync(Guid userId, IEnumerable>(folders); - await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, folderEntities); var cipherEntities = Mapper.Map>(ciphers); - await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, cipherEntities); + // SQLite does not support LinqToDB BulkCopy; use EF Core directly instead + if (dbContext.Database.IsSqlite()) + { + await dbContext.AddRangeAsync(folderEntities); + await dbContext.AddRangeAsync(cipherEntities); + } + else + { + await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, folderEntities); + await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, cipherEntities); + } await dbContext.UserBumpAccountRevisionDateAsync(userId); await dbContext.SaveChangesAsync(); @@ -181,24 +190,44 @@ public async Task CreateAsync(IEnumerable ciphers, { var dbContext = GetDatabaseContext(scope); var cipherEntities = Mapper.Map>(ciphers); - await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, cipherEntities); - - if (collections.Any()) + // SQLite does not support LinqToDB BulkCopy; use EF Core directly instead + if (dbContext.Database.IsSqlite()) { - var collectionEntities = Mapper.Map>(collections); - await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, collectionEntities); + await dbContext.AddRangeAsync(cipherEntities); + if (collections.Any()) + { + await dbContext.AddRangeAsync(Mapper.Map>(collections)); + } + if (collectionCiphers.Any()) + { + await dbContext.AddRangeAsync(Mapper.Map>(collectionCiphers)); + } + if (collectionUsers.Any()) + { + await dbContext.AddRangeAsync(Mapper.Map>(collectionUsers)); + } } - - if (collectionCiphers.Any()) + else { - var collectionCipherEntities = Mapper.Map>(collectionCiphers); - await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, collectionCipherEntities); - } + await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, cipherEntities); - if (collectionUsers.Any()) - { - var collectionUserEntities = Mapper.Map>(collectionUsers); - await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, collectionUserEntities); + if (collections.Any()) + { + var collectionEntities = Mapper.Map>(collections); + await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, collectionEntities); + } + + if (collectionCiphers.Any()) + { + var collectionCipherEntities = Mapper.Map>(collectionCiphers); + await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, collectionCipherEntities); + } + + if (collectionUsers.Any()) + { + var collectionUserEntities = Mapper.Map>(collectionUsers); + await dbContext.BulkCopyAsync(base.DefaultBulkCopyOptions, collectionUserEntities); + } } await dbContext.UserBumpAccountRevisionDateByOrganizationIdAsync(ciphers.First().OrganizationId.Value);