I am debugging the code below. When I check the database after executing the CompleteAsync() command, I observe that there is no change. The change only occurs when the method is completed. Don't you think this is misleading?
public async Task UpdateAsync(string name)
{
List<string> myList = new() { "1", "2" };
foreach (var id in myList)
{
using (var uow = unitOfWorkManager.Begin(isTransactional: true))
{
var product = await productRepository.GetAsync(id);
product.SetName(name);
await productRepository.UpdateAsync(product);
await uow.CompleteAsync();
}
}
}
[15:38:28 INF] Started database migrations...
[15:38:28 INF] Migrating schema for host database...
[15:38:29 ERR] ABP-LIC-0016 - You are not granted permission to use the module 'Volo.Abp.OpenIddict.Pro.EntityFrameworkCore-v7.1.1.0'.
[15:38:37 INF] Executing host database seed...
[15:38:49 INF] Successfully completed host database migrations.
[15:38:49 INF] Successfully completed all database migrations.
[15:38:49 INF] You can safely end this process...
Actually my database has been created.Is this error a fatal error?
Hi @maliming ,
Have you considered using the in-memory database in the .net core framework instead of sqllite? If so, why didn't you choose it?
when the await uow.CompleteAsync(); runs I observe that there is a change in the database
public virtual async Task UpdateNameAsync(Guid id)
{
using var uow = unitOfWorkManager.Begin(requiresNew: true, isTransactional: true);
var book = await _bookRepository.GetAsync(id);
book.Name = DateTime.Now.ToString();
await uow.SaveChangesAsync();
await uow.CompleteAsync();
throw new Exception("an occured exception")
}
but when the await uow.CompleteAsync(); runs in the code below, there is no change in the database. Surrounding unit of work manages book entity (instead of new uow)
public virtual async Task UpdateNameAsync(Guid id)
{
var book = await _bookRepository.GetAsync(id);
using var uow = unitOfWorkManager.Begin(requiresNew: true, isTransactional: true);
book.Name = DateTime.Now.ToString();
await uow.SaveChangesAsync();
await uow.CompleteAsync();
throw new Exception("an occured exception")
}
My original code similar like below. I want database changes to commit even though Exception is thrown.
public virtual async Task UpdateNameAsync(Guid id)
{
var book = await _bookRepository.GetAsync(id);
await UpdateNameFunctionAsync(book);
}
private async Task UpdateNameFunctionAsync(Book book)
{
var uow = unitOfWorkManager.Begin(requiresNew: true, isTransactional: true);
book.Name = DateTime.Now.ToString();
await uow.SaveChangesAsync();
await uow.CompleteAsync();
throw new Exception("an occured exception");
}
Would you consider this a bug?
Hi, I need to call a remote service in a bg-job,How can I do that?
could you give more detail. thanks.
but we don't recommend you to do this
It worked successfully when RemoteService(IsEnabled = true) . Thanks.
Well,can't proxy classes be used in domain layer? For example I would like to use it in a manager class. I know that I need to move these classes(contracts and interfaces) to the domain in order to use them in the domain layer.
My fault. builder.ConfigureSaas() method was being wrongly called at FirstEfCoreEntityExtensionMappings.cs. I noticed while trying to reproduce the steps. Many thank.
I sent mail (liangshiwei@abp.io)
SQLite Error 1: 'table "SaasEditions" already exists'.
at Microsoft.Data.Sqlite.SqliteException.ThrowExceptionForRC(Int32 rc, sqlite3 db)
at Microsoft.Data.Sqlite.SqliteCommand.<PrepareAndEnumerateStatements>d__64.MoveNext()
at Microsoft.Data.Sqlite.SqliteCommand.<GetStatements>d__54.MoveNext()
at Microsoft.Data.Sqlite.SqliteDataReader.NextResult()
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior behavior)
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader()
at Microsoft.Data.Sqlite.SqliteCommand.ExecuteNonQuery()
at Microsoft.EntityFrameworkCore.Storage.RelationalCommand.ExecuteNonQuery(RelationalCommandParameterObject parameterObject)
at Microsoft.EntityFrameworkCore.Migrations.MigrationCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
at Microsoft.EntityFrameworkCore.Storage.RelationalDatabaseCreator.CreateTables()
at MyCompany.ABC.EntityFrameworkCore.ABCEntityFrameworkCoreTestModule.CreateDatabaseAndGetConnection() in
I have two Dbcontext and run without error. But I cannot run test. and I got error : Microsoft.Data.Sqlite.SqliteException: 'SQLite Error 1: 'table "SaasEditions" already exists
public class MyFirsDbContext : AbpDbContext<MyFirsDbContext>,IHasEventInbox, IHasEventOutbox, IServicePriceDbContext
//IIdentityProDbContext,
//ISaasDbContext
{
}
[ReplaceDbContext(typeof(IIdentityProDbContext))]
[ReplaceDbContext(typeof(ISaasDbContext))]
[ConnectionStringName("Second")]
public class MySecondDbContext :AbpDbContext<MySecondDbContext>, IIdentityProDbContext, ISaasDbContext
{
...
// SaaS
public DbSet<Tenant> Tenants { get; set; }
public DbSet<Edition> Editions { get; set; }
...
}