相关疑难解决方法(0)

在Entity Framework Core中动态更改架构

UPD 这里是我解决问题的方式.虽然它可能不是最好的,但它对我有用.


我在使用EF Core时遇到问题.我想通过模式机制将项目数据库中不同公司的数据分开.我的问题是如何在运行时更改模式名称?我已经找到了关于这个问题的类似问题,但它仍然是答案,我有一些不同的条件.所以我有Resolve方法在必要时授予db-context

public static void Resolve(IServiceCollection services) {
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<DomainDbContext>()
        .AddDefaultTokenProviders();
    services.AddTransient<IOrderProvider, OrderProvider>();
    ...
}
Run Code Online (Sandbox Code Playgroud)

我可以设置schema-name OnModelCreating,但是,如前所述,这个方法只调用一次,所以我可以在这里设置模式名称globaly

protected override void OnModelCreating(ModelBuilder modelBuilder) {
    modelBuilder.HasDefaultSchema("public");
    base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)

或者通过类似的属性在模型中

[Table("order", Schema = "public")]
public class Order{...}
Run Code Online (Sandbox Code Playgroud)

但是如何在运行时更改模式名称?我根据每个请求创建了ef的上下文,但首先我通过请求为数据库中的某个模式共享表格查找了用户的模式名称.那么组织该机制的真正方法是什么:

  1. 根据用户的凭据计算出模式名称;
  2. 从特定架构的数据库中获取特定于用户的数据.

谢谢.

PS我使用PostgreSql,这是表名低的原因.

c# entity-framework database-schema entity-framework-core asp.net-core

16
推荐指数
5
解决办法
2万
查看次数