I found this attribute in TenantManagementDbContext. I want to use this function, ignore TenantId in a single query, not whole DbContext, How to do?
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.TenantManagement.EntityFrameworkCore;
[IgnoreMultiTenancy]
[ConnectionStringName(AbpTenantManagementDbProperties.ConnectionStringName)]
public class TenantManagementDbContext : AbpDbContext<TenantManagementDbContext>, ITenantManagementDbContext
{
There is an artilce introduce ... https://community.abp.io/posts/how-to-add-custom-property-to-the-user-entity-6ggxiddr
But in ABP 5.1.4, I can not found Appuser.cs in the folder named Users of Domain project. What's the best practice to add propertity to User now?
I want to add some fuction while Redirect to login.
Volo.Abp.AspNetCore.Components.Web.LeptonTheme/Components/RedirectToLogin.razor
@inject NavigationManager Navigation
@inject IJSRuntime JSRuntime
@code {
protected override void OnInitialized()
{
bool isWebAssembly = JSRuntime is IJSInProcessRuntime;
if (isWebAssembly)
{
Navigation.NavigateTo($"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
}
else
{
Navigation.NavigateTo($"account/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}", true);
}
}
}
My question is where is the source code of "account/login"?
[00:33:01 INF] Request starting HTTP/1.0 GET http://api.***.tech/api/abp/api-definition - -
[00:33:01 INF] Executing endpoint 'Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController.Get (Volo.Abp.AspNetCore.Mvc)'
[00:33:01 INF] Route matched with {area = "abp", action = "Get", controller = "AbpApiDefinition", page = ""}. Executing controller action with signature Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel Get(Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto) on controller Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController (Volo.Abp.AspNetCore.Mvc).
[00:33:01 ERR] ---------- RemoteServiceErrorInfo ----------
{
"code": null,
"message": "对不起,在处理你的请求期间,产生了一个服务器内部错误!",
"details": null,
"data": {},
"validationErrors": null
}
[00:33:01 ERR] Given type (System.String&, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) should be instance of System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (Parameter 'item')
System.ArgumentException: Given type (System.String&, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e) should be instance of System.Object, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e (Parameter 'item')
at Volo.Abp.Collections.TypeList`1.CheckType(Type item)
at Volo.Abp.Collections.TypeList`1.Add(Type item)
at Volo.Abp.Http.Modeling.ApiTypeNameHelper.GetSimpleTypeName(Type type, ITypeList duplicateTypes)
at Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel.Create(ParameterInfo parameterInfo)
at System.Linq.Enumerable.SelectArrayIterator`2.ToList()
at Volo.Abp.Http.Modeling.ActionApiDescriptionModel.Create(String uniqueName, MethodInfo method, String url, String httpMethod, IList`1 supportedVersions, Nullable`1 allowAnonymous, String implementFrom)
at Volo.Abp.AspNetCore.Mvc.AspNetCoreApiDescriptionModelProvider.AddApiDescriptionToModel(ApiDescription apiDescription, ApplicationApiDescriptionModel applicationModel, ApplicationApiDescriptionModelRequestDto input)
at Volo.Abp.AspNetCore.Mvc.AspNetCoreApiDescriptionModelProvider.CreateApiModel(ApplicationApiDescriptionModelRequestDto input)
at lambda_method10858(Closure , Object , Object[] )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
[00:33:01 INF] Executing ObjectResult, writing value of type 'Volo.Abp.Http.RemoteServiceErrorResponse'.
[00:33:01 INF] Executed action Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController.Get (Volo.Abp.AspNetCore.Mvc) in 128.478ms
[00:33:01 INF] Executed endpoint 'Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController.Get (Volo.Abp.AspNetCore.Mvc)'
What's the best practice of globle exception handler in Blazor Server Side application?
It seem that 'app.UseErrorPage()' is not working.
If you're creating a bug/problem report, please include followings:
PS D:\abp-change\saas-admin\src\Yee.Change.Id5.EntityFrameworkCore> dotnet ef migrations add AddTables_CmsKitPro --context Id5DbContext
Build started...
Build succeeded.
Done. To undo this action, use 'ef migrations remove'
PS D:\abp-change\saas-admin\src\Yee.Change.Id5.EntityFrameworkCore> dotnet ef database update --context Id5DbContext
Build started...
Build succeeded.
Applying migration '20220209034057_Added_Pro_Module_52534'.
Applying migration '20220209035638_AddTables_CmsKitPro'.
Done.
public partial class AddTables_CmsKitPro : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
public abstract class Id5DbContextBase<TDbContext> : AbpDbContext<TDbContext>
where TDbContext : DbContext
{
public Id5DbContextBase(DbContextOptions<TDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
/* Include modules to your migration db context */
builder.ConfigurePermissionManagement();
builder.ConfigureSettingManagement();
builder.ConfigureBackgroundJobs();
builder.ConfigureAuditLogging();
builder.ConfigureIdentityPro();
builder.ConfigureIdentityServer();
builder.ConfigureFeatureManagement();
builder.ConfigureLanguageManagement();
builder.ConfigureSaas();
builder.ConfigureTextTemplateManagement();
builder.ConfigureBlobStoring();
/* Configure your own tables/entities inside here */
//builder.Entity<YourEntity>(b =>
//{
// b.ToTable(Id5Consts.DbTablePrefix + "YourEntities", Id5Consts.DbSchema);
// b.ConfigureByConvention(); //auto configure for the base class props
// //...
//});
//if (builder.IsHostDatabase())
//{
// /* Tip: Configure mappings like that for the entities only available in the host side,
// * but should not be in the tenant databases. */
//}
builder.ConfigureCmsKitPro();
builder.ConfigureCmsKit();
}
}
[DependsOn(
typeof(Id5DomainModule),
typeof(AbpIdentityProEntityFrameworkCoreModule),
typeof(AbpIdentityServerEntityFrameworkCoreModule),
typeof(AbpPermissionManagementEntityFrameworkCoreModule),
typeof(AbpSettingManagementEntityFrameworkCoreModule),
typeof(AbpEntityFrameworkCoreSqlServerModule),
typeof(AbpBackgroundJobsEntityFrameworkCoreModule),
typeof(AbpAuditLoggingEntityFrameworkCoreModule),
typeof(AbpFeatureManagementEntityFrameworkCoreModule),
typeof(LanguageManagementEntityFrameworkCoreModule),
typeof(SaasEntityFrameworkCoreModule),
typeof(TextTemplateManagementEntityFrameworkCoreModule),
typeof(BlobStoringDatabaseEntityFrameworkCoreModule)
)]
[DependsOn(typeof(CmsKitProEntityFrameworkCoreModule))]
public class Id5EntityFrameworkCoreModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
Id5EfCoreEntityExtensionMappings.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAbpDbContext<Id5DbContext>(options =>
{
/* Remove "includeAllEntities: true" to create
* default repositories only for aggregate roots */
options.AddDefaultRepositories(includeAllEntities: true);
});
context.Services.AddAbpDbContext<Id5TenantDbContext>(options =>
{
/* Remove "includeAllEntities: true" to create
* default repositories only for aggregate roots */
options.AddDefaultRepositories(includeAllEntities: true);
});
Configure<AbpDbContextOptions>(options =>
{
/* The main point to change your DBMS.
* See also Id5DbContextFactoryBase for EF Core tooling. */
options.UseSqlServer();
});
}
}
Serilog.Log.Information("开始登记取消关注的情况。Open Id:" + openId);
ISubscribeUserRepository subscribeUserRepository = this.LazyServiceProvider.LazyGetRequiredService<ISubscribeUserRepository>();
if (subscribeUserRepository == null)
{
throw new Exception("没有找到 ISubscribeUserRepository。");
}
SubscribeUser subscribeUser = (await subscribeUserRepository.GetQueryableAsync()).FirstOrDefault(p => p.OpenId == openId && p.TenantId == tenantId);
if (subscribeUser == null)
{
subscribeUser = new SubscribeUser()
{
OpenId = openId,
Nick = "unknown",
UnSubscribedOn = DateTime.Now,
SubscribedTimes = 1,
UnSubscribedTimes = 1,
WeChatAppId = this.CurrentWeChatApp.WeChatApp.Result.Id,
TenantId = tenantId
};
subscribeUser = await subscribeUserRepository.InsertAsync(subscribeUser, autoSave: true);
Serilog.Log.Information("成功新增了取消关注的情况。Open Id:" + openId + ",创建时间:" + subscribeUser.CreationTime + "TenantId:" + tenantId);
}
else
{
subscribeUser.UnSubscribedOn = DateTime.Now;
subscribeUser.UnSubscribedTimes = subscribeUser.UnSubscribedTimes + 1;
await subscribeUserRepository.UpdateAsync(subscribeUser, autoSave: true);
Serilog.Log.Information("成功更新了取消关注的情况。Open Id:" + openId);
}
return true;
[23:11:16 INF] 开始登记取消关注的情况。Open Id:oZKzr0_vqPUa5e_DpS5gusyU7MGI
[23:11:16 DBG] Added 0 entity changes to the current audit log
[23:11:16 INF] 成功新增了取消关注的情况。Open Id:oZKzr0_vqPUa5e_DpS5gusyU7MGI,创建时间:2022/2/8 下午11:11:16TenantId:55eea838-1079-84e1-a90a-39fe122f8fb5
[23:11:16 DBG] Added 0 entity changes to the current audit log
Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'startIndex')
System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'startIndex')
at System.Globalization.CompareInfo.IndexOf(String source, String value, Int32 startIndex, Int32 count, CompareOptions options)
at System.String.IndexOf(String value, Int32 startIndex, Int32 count, StringComparison comparisonType)
at System.String.IndexOf(String value, Int32 startIndex, StringComparison comparisonType)
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.EntityGenerateCommand.F1AAu43krY(String , String , String )
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.EntityGenerateCommand.IBpAlr5Quy(String , String , Boolean )
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.EntityGenerateCommand.MYcAWPr5GZ(String , String , Boolean , DatabaseProvider )
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.EntityGenerateCommand.yreAdjUhWH(String , DatabaseProvider )
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.EntityGenerateCommand.cqSAJdEgpq()
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.EntityGenerateCommand.ExecuteAsync(CrudPageCommandOptions options)
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.CommandManager.ExecuteAllAsync(CrudPageCommandOptions options)
at Volo.Abp.Suite.Areas.AbpSuite.CrudPageGenerator.Commands.CrudPageGenerator.GenerateAsync(EntityModel entity, Solution solution)
at Volo.Abp.Suite.Controllers.CrudPageGeneratorController.SaveAndGenerateEntityAsync(Guid solutionId, EntityModel entity)
at lambda_method2055(Closure , Object )
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
My clients want to look Chinese UI, while they touch my web application.
How to do ?