我正在使用EF 4.3和Code First方法。在EF 4.3中,推荐使用新的配置部分为上下文初始化连接字符串。我在网上搜索了一些内容,似乎找不到一种方便的方法来使用此方法初始化具有可配置数据库名称的连接。例如,让我们说我在应用程序中有一个MyDBContext实体。我希望它使用连接字符串中指定的数据库名称,如Initial Catalog=MyDB;。使用从EF 4.1开始的旧方法,我可以通过将连接字符串添加到配置文件中的部分来轻松解决这个问题。
如果我想使用EF 4.3支持的新configsection,我就没有办法在连接字符串中指定数据库名称。我已经尝试了以下方法,但
然而,如果我采用这种方法,最终会将数据库名称硬编码到我的应用程序中,个人不喜欢这种方法。我想知道是否有一种方便的方式可以从Web.config文件传递数据库名称到我的DB上下文中,或者我应该继续使用部分?
<add name="MyDBContext" connectionString="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient"/>
如果我想使用EF 4.3支持的新configsection,我就没有办法在连接字符串中指定数据库名称。我已经尝试了以下方法,但
Initial Catalog
属性被忽略了。我相信它被忽略是有充分理由的,因为整个东西是一个DefaultConnectionFactory
,可以被我的应用程序中的多个上下文使用。<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
使用Code First方法创建的默认数据库名称为 MyNamespace.MyDBContext
可以通过在基础DBContext
对象的nameOrConnectionString
参数中传递一个值来覆盖此默认命名。
因此我可以这样做:
public MyDBContext() : base("MyDB") { }
然而,如果我采用这种方法,最终会将数据库名称硬编码到我的应用程序中,个人不喜欢这种方法。我想知道是否有一种方便的方式可以从Web.config文件传递数据库名称到我的DB上下文中,或者我应该继续使用部分?