是否有可能在数据库查询指定架构?

时间:2019-02-01 18:16:13

标签: c# asp.net-core entity-framework-core

我有一个具有多个架构的数据库。

在我的C#代码中,我有一个基本的上下文,它执行一些简洁的逻辑,我希望所有其他上下文都能够执行。我们将其称为“ ParentContext”。基本上ParentContext有权访问用户模式和表

我有几个其他上下文的继承ParentContext。例如child1Context,child2Context ....

ParentContext永远不会被实例化。

我需要知道的是,在做自定义逻辑时是否有一种在ParentContext或childContexts中指定的方法,该逻辑需要访问处于特定架构中的用户才能使用适当的架构。 IE浏览器

SELECT "Name" FROM "UserSchema"."UserTable" WHERE Id = 1;

代替

SELECT "Name" FROM "Child2ContextSchema"."UserTable" WHERE Id = 1;

要清楚,我已经指定的模式的

的从ParentContext C#代码的示例

    public async Task<User> GetUserAsync(int Id)
    {
        User user = await User.SingleOrDefaultAsync(u => 
        u.Id == Id);

        return user;
    }

我想出了一个解决方案,但它创造了另一个问题! 在childContext内部,您可以指定实体在OnModelCreating方法内部使用的架构:

 protected override void OnModelCreating(ModelBuilder modelBuilder)
    {

        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<User>().ToTable("User", "UserSchema");
     }

新问题,现在每次我需要运行迁移时,它都会尝试构建该表,并且会出现异常。可手动固定的,但在一个团队中10开发的,这可能是非常糟糕的一个问题。有任何想法吗?我试图忽视实体,所以它不会试图建立一个用户表,当我添加一个新的迁移。但是,那么上下文不知道怎么去跟这个表了。

有什么建议吗?

而且这是在连接字符串如何实例化:

 services.AddEntityFrameworkNpgsql()



 .AddDbContext<Entity1>(options => 
options.UseNpgsql(Configuration.GetConnectionString(ConnectionString)))
        .AddDbContext<Entity2>(options => 
options.UseNpgsql(ConnectionString))

0 个答案:

没有答案