Можно ли указать схему в запросе базы данных? - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть база данных с несколькими схемами.

В моем коде на 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;

Для ясности, я указал схему

Пример кода c # из ParentContext

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

        return user;
    }

Я разобрался с одним решением, но оно создает другую проблему!Внутри childContexts Вы можете указать схему, которую правообладатель использует внутри метода 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...