If you're creating a bug/problem report, please include followings:
- ABP Framework version: v7.0.0
I updated to abp v7.0.0. I can run my application, however, when running the unit tests I receive following errors randomly for the tests.
Message: Volo.Abp.AbpInitializationException : An error occurred during the initialize Volo.Abp.Modularity.OnApplicationInitializationModuleLifecycleContributor phase of the module TestProjectDb.TestProjectDbTestBaseModule, TestProjectDb.TestBase, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null: SqliteConnection does not support nested transactions.. See the inner exception for details. ---- System.InvalidOperationException : SqliteConnection does not support nested transactions.
Stack Trace:
ModuleManager.InitializeModules(ApplicationInitializationContext context)
AbpApplicationBase.InitializeModules()
AbpApplicationWithExternalServiceProvider.Initialize(IServiceProvider serviceProvider)
AbpIntegratedTest1.ctor() TestProjectDbTestBase1.ctor()
TestProjectDbApplicationTestBase.ctor()
I found https://support.abp.io/QA/Questions/2176/Regarding-Unit-test-issue and replaced the service as described, however, this does not fix my problem. I do understand the problem but dont know how to fix this or what changed between my last v6.0.0 and this version?
15 Answer(s)
-
0
hi
Please try to update your
AddressesDataSeedContributor.using System; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Uow; using test04012022.Addresses; namespace test04012022.Addresses { public class AddressesDataSeedContributor : IDataSeedContributor, ITransientDependency { private readonly IAddressRepository _addressRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; public AddressesDataSeedContributor(IAddressRepository addressRepository, IUnitOfWorkManager unitOfWorkManager) { _addressRepository = addressRepository; _unitOfWorkManager = unitOfWorkManager; } public async Task SeedAsync(DataSeedContext context) { if (await _addressRepository.FindAsync(Guid.Parse("a4821c19-b073-4dd4-94c0-299f3712a7ed")) == null) { await _addressRepository.InsertAsync(new Address ( id: Guid.Parse("a4821c19-b073-4dd4-94c0-299f3712a7ed"), firstname: "e60f19e1c89147d4958618eecd2e6" )); } if (await _addressRepository.FindAsync(Guid.Parse("87175640-2b9d-4c28-a1c2-b6aceca4969f")) == null) { await _addressRepository.InsertAsync(new Address ( id: Guid.Parse("87175640-2b9d-4c28-a1c2-b6aceca4969f"), firstname: "b23b24db6d974e7493ef2e1bdb915ed185da359993974b27bd30cb50b0c33c2ea02b782148f845" )); } await _unitOfWorkManager.Current.SaveChangesAsync(); } } }Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
Hi, Thanks this works for me. However, for my real project, I have a lot of seed methods. Is there any other way than adding the if condition to every insert statement now? In addition: In my project I have tests like following which fail with the same error. What should I do here?
[Fact] public async Task CreateAsync() { // Arrange var input = new CustomerCreateDto { Name = "bf64c99897834", Street = "30b28c8ff57b464d9bc2f5618f15be1c75930a933aa140cb80f614f124bb3f0461f45", Postcode = "aa2e0879154b4a2bbf78597283eb7e57", City = "5f4242b5aa61476a97c3e5af411cf498521949a2ad2c47edbbbe", Country = "c83c88797e63411f882bdd48759e99e87679b076e154472482c6e885b56830cf82abbd257b894cd0a8588a73ad277e3c7c6d", VATNo = "d6d31592918a4f0f96ee23ad51a87e0ab5b0f1b49ccb41acbf85136106af9ba445de4a676ed14b4db27c63267679c6d8def4", Status = default, State = "76d47ce8de444b898aa5565717a4f154c746171559174f87a9fff21f832690097571c7457c7544b3a3041662529c371a881e" }; // Act var serviceResult = await _customersAppService.CreateAsync(input); // Assert var result = await _customerRepository.FindAsync(c => c.Id == serviceResult.Id); result.ShouldNotBe(null); result.Name.ShouldBe("bf64c99897834"); result.Street.ShouldBe("30b28c8ff57b464d9bc2f5618f15be1c75930a933aa140cb80f614f124bb3f0461f45"); result.Postcode.ShouldBe("aa2e0879154b4a2bbf78597283eb7e57"); result.City.ShouldBe("5f4242b5aa61476a97c3e5af411cf498521949a2ad2c47edbbbe"); result.Country.ShouldBe("c83c88797e63411f882bdd48759e99e87679b076e154472482c6e885b56830cf82abbd257b894cd0a8588a73ad277e3c7c6d"); result.VATNo.ShouldBe("d6d31592918a4f0f96ee23ad51a87e0ab5b0f1b49ccb41acbf85136106af9ba445de4a676ed14b4db27c63267679c6d8def4"); result.Status.ShouldBe(default); result.State.ShouldBe("76d47ce8de444b898aa5565717a4f154c746171559174f87a9fff21f832690097571c7457c7544b3a3041662529c371a881e"); }Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
However, for my real project, I have a lot of seed methods. Is there any other way than adding the if condition to every insert statement now?
hi
There is no good way. we have to query first. like:
https://github.com/abpframework/abp/blob/08034310b15e9056c019403f500a507e2b4efbdd/modules/openiddict/app/OpenIddict.Demo.Server/EntityFrameworkCore/ServerDataSeedContributor.cs#L28 https://github.com/abpframework/abp/blob/e3e1779de6df5d26f01cdc8e99ac9cbcb3d24d3c/modules/cms-kit/host/Volo.CmsKit.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs#L68
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
Hi,
ok, bit of a shame that I have to rewrite all the tests now.
2 more questions:
- can you tell when the templates for the suite will be adjusted to match your pattern?
- what exactly was changed between the 6.x and the 7.0 that leads to this behavior? Is it due to .NET 7 or what change was there in the abp.io framework?
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
Hi there,
I came through here as I got issues with unit tests on our solution since upgrade to ABP 7 as well, annoying as we need the tests to be validated in our CI/CD.
To make more tests I created a new solution with ABP 7 (Blazor server), then added one entity to generate unit tests.
I then added the FindAsync method before each Insert in the DataSeedContributor contributor class as you said.
I still have errors that come up randomly:
On Application.Tests project, it can be either Create, Delete, Get, GetList. When I use "Run All tests", I have often one of them getting in error with: ---- System.InvalidOperationException : SqliteConnection does not support nested transactions.
Then, either on other projects: EntityFrameworkCore.DomainTests, EntityFrameworkCore.Tests or EntityFrameworkCore.Samples
---- System.NullReferenceException : Object reference not set to an instance of an object.It's very confusing as sometimes there is no error at all...
My own solution (not the one I created for tests), have exactly the same types of errors. I was wondering if it was because my own environment, but when I run tests on Azure, I got the same errors as well.
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
I saw this tickets yes, but as they are 1 year old I did expect that it would have been fixed on a new project with the last ABP version.
I added this lines:
Configure<AbpUnitOfWorkDefaultOptions>(options => { options.TransactionBehavior = UnitOfWorkTransactionBehavior.Disabled; });
Then it works now. Thanks
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post) -
0
- Is your AddressesDataSeedContributor class generated by the suite?
I have the same problem as @a3x.
The test code is generated by the suite (version 7.0.1).
The tip from @christophe.baille has made it better, but at irregular intervals certain tests still fail. Especially when I run all tests. If I then run the failed test separately, then it works.
Markdown supported.Copy, paste, or drag & drop images and files (max 100 MB per file, 100 MB total per post)



