2017-09-05 38 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

然后,您可以关闭模​​型检查,如果您确定它没有更改。 –