C# ASP.NET MVC DB首先创建动态dbcontext

C# ASP.NET MVC DB首先创建动态dbcontext,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我是MVC的新手,我用DB first方法创建了两个dbcontext(2016年和2017年),我将根据年份参数访问它 在web.config中: <add name="DB2016Context" connectionString="metadata=res://*/Models.Model2016.csdl|res://*/Models.Model2016.ssdl|res://*/Models.Model2016.msl;provider=System.Data.SqlClient

我是MVC的新手,我用DB first方法创建了两个dbcontext(2016年和2017年),我将根据年份参数访问它

在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" />
供使用

    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();
DbMyContext dbSelected=新的DbMyContext(年);
DbSet tab1=dbSelected.Set();
使用(已选)
{
变量查询=(来自表1中的
其中a.YEAR==年
orderby a.NAME
选择新的{a.ID,a.YEAR,a.NAME}).Distinct();
我的问题是:每年都会创建一个新的数据库,相同的结构,我的应用程序应该动态创建一个dbcontext来连接到每个数据库,而不必手动创建它

如果我说得不太清楚,我道歉。
谢谢

考虑使用这种方法。您很快就会发现它更方便。

要动态生成
DBContext
,您需要生成相应的EF
connectionString
并将其写入
appSettings
。提示:
OpenWebConfiguration
EntityConnectionStringBuilder
(对于当前提供的代码,您的意图仍然不清楚)。您的意思是在web.config中添加与已存在的字符串相同但年份不同的字符串。是的,这是我现在的想法。我想知道新创建的数据库是如何创建的(手动或编程方式)通过为该数据库定义
EntityConnectionStringBuilder
更改绑定到EF数据上下文的年份后(也从中生成数据模型类)。新数据库是由其他人手动创建的,因此应用程序必须有一个选择,从中选择与数据库相关的年份,并允许它连接到数据库进行查询。但是如何使用EntityConnectionStringBuilder为每个数据库创建数据模型类?感谢您的帮助。由于数据库是手动创建的,因此您可以使用
DateTime.Now、 年份
要创建年份数字,请使用
SqlConnectionStringBuilder
创建标准SQL Server连接。然后,使用
EntityConnectionStringBuilder
创建EF连接,将它们保存在web.config中,并从EF连接创建新的
DbContext
(可能需要检查相应的数据库是否存在)。当然。只需使用此数据库生成初始模型。然后,如果您确定模型不会发生更改,则可以关闭模型检查。因此,如果我之前理解得很好,我应该先使用db创建类,然后关闭模型?您可以添加有关如何执行此操作的更多详细信息吗?谢谢您无法关闭模型,因为您需要它来访问数据库。您可以关闭忽略数据库更改的模型检查。打开我答案中的链接。这应该是一个好的开始。
    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();