簡體   English   中英

在 LINQ Entity Framework asp.net MVC 5 中切換數據庫上下文

[英]Switching DB Context in LINQ Entity Framework asp.net MVC 5

在 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
                      {
                             ...
                      });

我的 web.config 上下文數據庫

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

您應該在服務中注冊另一個 DbContext,在Startup.cs 的ConfigureServices方法中,並將其傳遞給類的構造函數,例如:

啟動文件

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
                      {
                             ...
                      });
}

您可以通過編輯 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
               {
                ...
               });

注意:您不能在此解決方案中使用代碼優先Update-Database

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM