小编mat*_*350的帖子

保存前设置值

我想知道是否有任何方法可以在保存时为实体设置值?
因为我正在开发一个多租户 Web 应用程序,并且我想设置当前租户 ID(通过简单的 DI 服务)。

我尝试在 Fluent API 中使用HasDefaultValue(),但这将尝试转换为 SQL 函数。所以这对我不起作用。

builder.Entity<Order>( )
    .HasQueryFilter(p => p.TenantId == _tenantProvider.GetTenantId())
    .Property(p => p.TenantId)
    .HasDefaultValue(_tenantProvider.GetTenantId());
Run Code Online (Sandbox Code Playgroud)

非常感谢任何建议。

c# entity-framework-core

7
推荐指数
2
解决办法
4654
查看次数

通过DI注册的IActionContextAccessor中的ActionContext为null

我在IActionContextAccessor使用 asp.net core 的内置 DI 容器时遇到了一些问题。IActionContextAccessor.ActionContext每次请求时该属性为空。我正在尝试IActionContextAccessor像这样注册:

services.TryAddSingleton<IActionContextAccessor, ActionContextAccessor>( );
services.TryAddScoped<ITenantProvider, TenantProvider>( );
Run Code Online (Sandbox Code Playgroud)


我正在尝试访问ActionContextAccessor.ActionContext这里

public TenantProvider( SomeTenantsDbContext context, IActionContextAccessor accessor )
{
    var alias = accessor?.ActionContext?.RouteData?.Values["tenant"]?.ToString();
    if(alias != null)
    {
        _tenantId = context.Tenants.FirstOrDefault( t => t.Alias == alias )?.Id;
    }
}
Run Code Online (Sandbox Code Playgroud)


这可能是什么原因。欢迎所有建议

c# asp.net-core-mvc asp.net-core asp.net-core-2.0

3
推荐指数
1
解决办法
1645
查看次数