使用EF 4.3,它建议使用新的< entityFramework /> config部分初始化上下文的连接字符串.
我已经在线进行了一些搜索,我似乎无法找到一种方便的方法来使用此方法初始化具有可配置数据库名称的连接.
例如,假设我的应用程序中有一个MyDBContext实体.
我希望它使用初始目录= MyDB的连接字符串中指定的数据库名称;
使用EF 4.1中的旧方法,我可以通过将连接字符串添加到< connectionstring>来实现这一点.配置文件中的部分.
<add name="MyDBContext" connectionString="Data Source=.\sqlEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.sqlClient"/>
如果我想使用EF 4.3支持的更新的配置部分,我无法在连接字符串中指定数据库名称.我尝试了以下内容,但忽略了初始目录属性.我认为它有理由被忽略,因为整个事情是一个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>
我的codefirst方法因使用它而创建的默认数据库名称是MyNamespace.MyDBContext
我知道有一种方法可以通过将值传递给基本DBContext对象上的nameOrConnectionString参数来覆盖此默认命名.
所以我可以这样做:
public MyDBContext() : base("MyDB") { }
但是,如果我采用这种方法,我最终将数据库名称硬编码到我的应用程序中,我个人不喜欢这样.
我想知道有没有办法可以方便地从Web.config文件中为我的数据库上下文传递数据库名称,或者我应该继续使用< connectionstrings>部分?
解决方法
也就是说,我自己没有遇到过这个问题(我很好地硬编码数据库名称 – 它不应该改变)一个选项可能是将你想要的数据库名称存储在Web.config中作为应用程序设置,然后让你的代码从那里拉取值.
public UnicornsContext() : base("name=UnicornsCEDatabase") { }
通过拉动具有该特定名称的连接字符串:
<configuration> <connectionStrings> <add name="UnicornsCEDatabase" providerName="System.Data.sqlServerCe.4.0" connectionString="Data Source=Unicorns.sdf"/> </connectionStrings> </configuration>
根据http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx,这应该仍然适用于4.3.