[英]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.