2017-09-05 40 views
2

我新的MVC和我創建了兩個的DbContext(2016年和2017年),與DB第一種方法,我將訪問此,根據年份不同參數ASP.NET MVC DB首先創建動態的DbContext

在web.config中:

<add name="DB2016Context" connectionString="metadata=res://*/Models.Model2016.csdl|res://*/Models.Model2016.ssdl|res://*/Models.Model2016.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DBSource;initial catalog=DB2016;persist security info=True;user id=xx;password=xx;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
<add name="DB2017Context" connectionString="metadata=res://*/Models.Model2017.csdl|res://*/Models.Model2017.ssdl|res://*/Models.Model2017.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DBSource;initial catalog=DB2017;persist security info=True;user id=xx;password=xx;multipleactiveresultsets=True;application name=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 

我已創建模型MyDbContext.cs

public DbMyContext(int year) 
      : base("name=DB" + year + "Context") 
     { } 

對於使用

DbMyContext dbSelected = new DbMyContext(year); 
    DbSet<Models.Tab1> tab1 = dbSelected.Set<Models.Tab1>(); 
      using (dbSelected) 
      { 
       var query = (from a in tab1 
          where a.YEAR== year 
          orderby a.NAME 
          select new { a.ID, a.YEAR, a.NAME }).Distinct(); 

我的問題:每年創建一個新的數據庫,相同的結構和我的應用程序應動態地創建一個dbcontext連接到每一個,而不必手動去創建它。

我很抱歉,如果我不是很清楚。 謝謝

+0

要動態生成'DBContext',您需要生成相應的EF'connectionString'並將其寫入'appSettings'。提示:「OpenWebConfiguration」和「EntityConnectionStringBuilder」(目前提供的代碼您的意圖仍不清楚)。 –

+0

你的意思是在web.config中添加與已經存在但年份不同的字符串? ES。 Massi

+0

是的,這是我現在想的。我想知道如何通過爲該數據庫定義'EntityConnectionStringBuilder'(也從中生成數據模型類)來更改綁定到EF數據上下文的年份後,如何新創建數據庫(手動或編程方式)。 –

回答

0

考慮使用Code First的方法。你會很快發現它更方便。

+0

即使db已經在那裏? – Massi

+0

當然。只需使用此數據庫生成初始模型。 –

+0

然後,您可以關閉模​​型檢查,如果您確定它沒有更改。 –