Переключение контекста БД в LINQ Entity Framework asp.net MVC 5 - PullRequest
1 голос
/ 21 июня 2019

В Laravel у них есть красноречие, которое может меняться между базами данных.

Например:

$db = (statement) ? "mysql1" : "mysql2" ;

$users = DB::connection($db)   
              ->select(...);

Как ты делаешь это в LINQ?

Model data =  (from table in context_db <--- how to i dynamically change this?? 
               .Model
               where table.ref_no == ref_no
               select new Model
                      {
                             ...
                      });

my web.config contextdb

 <add name="DBContext1" connectionString=" ... / >
 <add name="DBContext2" connectionString=" ... / >   

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Вы должны зарегистрировать ваш другой DbContext в сервисах, в методе ConfigureServices в Startup.cs и передать его конструктору вашего класса, например:

Startup.cs

services.AddDbContext<YourDbContextA>(options =>
                options.UseSqlServer(
                Configuration.GetConnectionString("YourConnectionString")));

YourClass.cs (или YourClass.cshtml.cs)

public class YourClass
{
        private readonly YourDbContext _context;

        public CreateModel(YourDbContext context)
        {
            _context = context;
        }
 }

Вы можете зарегистрировать несколько DbContext объектов в службах и можетепередать несколько DbContext объектов вашему constructor.

Позже вы можете переключаться между вашими dbContextes:

 private DbContext getDbContext(bool statement)
 {
     if(statement)
       return _dbcontext1;
     else if(statement2)
       return _dbcontext2;
     else
       return _someOtherDbContext;
 }



private void foo()
{
 Model data =  (from table in getDbContext(statement)
               where table.ref_no == ref_no
               select new Model
                      {
                             ...
                      });
}
0 голосов
/ 24 июня 2019

Отвечая на мой OP, это может помочь другим, потому что я не могу найти любую документацию.

Вы можете сделать это, отредактировав ваш конструктор ContextDB.

Сначала вы должны установить строку подключения на вашем web.config

 <add name="DBContext1" connectionString=" ... / >
 <add name="DBContext2" connectionString=" ... / >   

секунду в вашем конструкторе contextdb добавьте параметр для вашего соединения.

public partial class YourContextDB: DbContext
{
        public YourContextDB(string connection = "name=DBContext1")
            : base(connection )
        {
        }
        ... //basically ur models below
}

третий Теперь вы можете сделать это.

string connection = (statement) ? "name=DBContext2" : "name=DBContext1";
YourContextDB dbcontext = new YourContextDB(connection); //default is "name=DBContext1"

Model data =  (from table in dbcontext <--- dynamic dbcontext
               .Model
               where table.ref_no == ref_no
               select new Model
               {
                ...
               });

Я надеюсь, что это может помочь другим, у которых есть требование, как у меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...