Hi,
Could you share a project that can reproduce the problem with me? shiwei.liang@volosoft.com I will check it. thanks
Hi,
You can try:
[ConnectionStringName(ProductServiceDbProperties.ConnectionStringName)]
public class ProductServiceDbContext : AbpDbContext<ProductServiceDbContext>, ICmsKitProDbContext, ICmsKitDbContext
{
public DbSet<Product> Products { get; set; }
.......
public ProductServiceDbContext(DbContextOptions<ProductServiceDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureProductService();
builder.ConfigureCmsKitPro();
builder.ConfigureCmsKit();
}
}
[DependsOn(
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(AbpEntityFrameworkCoreModule),
typeof(ProductServiceDomainModule)
)]
[DependsOn(typeof(CmsKitProEntityFrameworkCoreModule))]
public class ProductServiceEntityFrameworkCoreModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
ProductServiceEfCoreEntityExtensionMappings.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAbpDbContext<ProductServiceDbContext>(options =>
{
options.ReplaceDbContext<ICmsKitDbContext>(); // add this line
options.ReplaceDbContext<ICmsKitProDbContext>(); // add this line
/* Remove "includeAllEntities: true" to create
* default repositories only for aggregate roots */
options.AddDefaultRepositories(includeAllEntities: true);
options.AddRepository<Product, EfCoreProductRepository>();
});
context.Services.Configure<AbpDbContextOptions>(options => { });
Configure<AbpDbContextOptions>(options =>
{
options.Configure<ProductServiceDbContext>(c =>
{
c.UseMySQL(b =>
{
b.MigrationsHistoryTable("__ProductService_Migrations");
});
});
});
}
}
Hi,
Background Job execute only once and Background Worker cycle execution. This is their most direct difference.
Hi,
Please share the link to support@abp.io and explain your question, thanks.
Hi,
You can assign a role to the user on the user edit page.
Hi,
May I ask what blocked you?
Hi,
You can try this:
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(MobileNavbar))]
public class MyMobileWasmNavbar : MobileWasmNavbar, IDisposable
{
public const string LogoutMenuName = "UserMenu.SideMenu.Logout";
protected override string LoginLink => "/authentication/login";
[Inject]
IOptions<AbpRemoteServiceOptions> AbpRemoteServiceOptions { get; set; }
[Inject]
protected ApplicationConfigurationChangedService ApplicationConfigurationChangedService { get; set; }
[Inject]
protected IJSRuntime JsRuntime { get; set; }
protected override async Task OnInitializedAsync()
{
await SetMenuAndProfileAsync();
ApplicationConfigurationChangedService.Changed += ApplicationConfigurationChanged;
}
private async void ApplicationConfigurationChanged()
{
await SetMenuAndProfileAsync();
await InvokeAsync(StateHasChanged);
}
private async Task SetMenuAndProfileAsync()
{
UserMenu = await MenuManager.GetAsync(StandardMenus.User);
var menu = await MainMenuProvider.GetMenuAsync();
SelectedMenuItems = Options.Value.MobileMenuSelector(menu.Items.AsReadOnly()).Take(2).ToList();
if (CurrentUser.IsAuthenticated && CurrentUser.Id != null)
{
ProfileImageUrl = GetProfilePictureURL(CurrentUser.GetId());
}
if (CurrentUser.IsAuthenticated)
{
UserMenu.AddItem(new UI.Navigation.ApplicationMenuItem(
LogoutMenuName,
L["Logout"],
"/authentication/logout",
icon: "bi bi-power"));
}
await JsRuntime.InvokeVoidAsync("resetLeptonXToolbar");
}
protected override string GetProfilePictureURL(Guid userId)
{
return AbpRemoteServiceOptions.Value.RemoteServices
.GetConfigurationOrDefaultOrNull("AbpAccountPublic")?
.BaseUrl.EnsureEndsWith('/')
+ $"api/account/profile-picture-file/{userId}";
}
public void Dispose()
{
ApplicationConfigurationChangedService.Changed -= ApplicationConfigurationChanged;
}
}
Hi,
Please share the full steps include the LDAP server Information(users etc..)