Thanks a lot for your great explanations. I created an issue: https://github.com/abpframework/abp/issues/8019
I created an issue: https://github.com/abpframework/abp/issues/8019
You can find why the problem occurs and the solution here.
So I am closing this ticket. You can re-open and add comment if you want.
You can find why the problem occurs and the solution here.
So I am closing this ticket. You can re-open and add comment if you want.
Hi,
I need the following information to better answer your question:
It is something like "How to join tables in a microservice system where each service has its own database".
Problem is similar because we've designed each module so that they can be deployed as a independent microservice if needed.
Isn't there any solution?
Performing a join assumes that both module tables will always be in the same database. With this assumption;
- You have two modules: A & B.
- A has entities like A1, A2, A3... and B has entities like B1, B2, B3.
- You want to Join with A1 & B2 entities inside the A module's source code.
Problem: That's not possible because they are in different DbContexts. Solution:
- Create a similar entity (AB2) to B2 in the A module (you can directly copy or create a similar entitiy with the only properties required for module A).
- Map this entity (AB2) to the same database table with B2.
- To not have problem in your migration, don't include this mapping in the unified migration.
You can find more information about the implementation here
If this answer does not help or is not sufficient to solve your question, please reply to me.
This is a bug, we will fix it. by the way, ticket refunded : )
For now, can you try again after creating the following class under the **.Web/Pages/Account/Components/ProfileManagementGroup/PersonalInfo
folders:
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ConfirmPhoneNumberModalModel))]
public class MyConfirmPhoneNumberModalModel : ConfirmPhoneNumberModalModel
{
private readonly IAccountAppService _accountAppService;
public MyConfirmPhoneNumberModalModel(IAccountAppService accountAppService) : base(accountAppService)
{
_accountAppService = accountAppService;
}
public override async Task OnPostAsync()
{
await _accountAppService.ConfirmPhoneNumberAsync(new ConfirmPhoneNumberInput
{
UserId = CurrentUser.GetId(),
Token = PhoneConfirmationToken
});
}
}
Note: Folders are just for keeping order :)
Please let me know if it works in your case.
Can you please clarify what this means "To not have problem in your migration, don't include this mapping in the unified migration." If I create the "dublicate" entity into module A. I have to have entity configuration to map the entity into the same table. How would I then exclude the configuration from migration creation?
Actually, if you have done "Map this entity (AB2) to the same database table with B2" correctly, you should not have any problems.
Because it was already created by module B in that entity database. When you create a new entity with the same name in module A and configure it similarly, you will see that it is not included in the unified migration.
If it is included in the unified migration, there may be two different tables in your database doing the same job, in this case it is useful to check as it is not wanted.
You can also look here for an example.
As with anything, it's a tradeoff. You can find why in the "Motivation" section of this article.
Hello there,
I wrote the necessary codes to reproduce the problem. But it worked fine for me. You can find the codes I wrote to test below;
I updated the MyProjectNameEfCoreEntityExtensionMappings
class in the MyProjectName.EntityFramework
project.
public static class MyProjectNameEfCoreEntityExtensionMappings
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public static void Configure()
{
MyProjectNameGlobalFeatureConfigurator.Configure();
MyProjectNameModuleExtensionConfigurator.Configure();
OneTimeRunner.Run(() =>
{
ObjectExtensionManager.Instance
.MapEfCoreProperty<Tenant, Boolean?>(
"IsCheck",
(entityBuilder, propertyBuilder) =>
{
propertyBuilder.HasDefaultValue(null);
}
);
});
}
}
Note: Maybe this step is not necessary for you. Note: This class can be used to map extra properties to table fields in the database. So don't forget to add migration and update the database.
Open the MyProjectNameDemoModuleExtensionConfigurator
in the MyProjectName.Domain.Shared
project, and I changed the contents of the ConfigureExtraProperties
method as shown below:
private static void ConfigureExtraProperties()
{
ObjectExtensionManager.Instance.Modules().ConfigureSaas(saas =>
{
saas.ConfigureTenant(tenant =>
{
tenant.AddOrUpdateProperty<Boolean?>(
"IsCheck",
options =>
{
options.DefaultValue = null;
}
);
});
});
}
Result
Please let me know if the solution worked for you :)