2012-09-04 130 views
7

我使用EF 4.3和代码优先的方法。实体框架4.3代码优先数据库命名

随着EF 4.3,它建议使用新<entityFramework />配置部分初始化的上下文的连接字符串。

我做了一些网上搜索,我似乎无法找到使用此方法用于初始化与配置的数据库名称的连接的便捷方式。

例如,让说,我在我的应用程序中的MyDBContext实体。 我希望它用在连接字符串中指定的数据库名称从Initial Catalog=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支持的较新的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> 

我codefirst方法创造与使用的结果,这是MyNamespace.MyDBContext默认的数据库名称中使用

据我所知,有一种方法可以通过将一个值传递给基于DBContext对象的nameOrConnectionString参数来覆盖此默认命名。

所以,我可以做这样的事情:

public MyDBContext() : base("MyDB") { } 

但是,如果我采取这种做法我结束了硬编码DB名字为我的应用程序和个人而言,我不喜欢这样。

我想知道是否有任何方法可以方便地从Web.config文件中为我的数据库上下文传递数据库名称,还是应该继续使用<connectionstrings>部分?

回答

0

你觉得多久数据库名称将不得不改变?

这么说,我还没有遇到这个问题我自己(我很好硬编码的数据库名称 - 它不应该改变)一个选择可以是存储在Web.config希望数据库名称作为应用程序设置,然后让您的代码从那里获取值。

编辑:您可能也想看看http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

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。

+1

一般来说,我不指望DB名称改变。但可能会出现数据库名称可能与同一SQL实例中的另一个数据库名称冲突的情况。如果我想在同一个SQL实例上运行同一个应用程序的多个实例,也是这种情况,如果不重新编译应用程序并更改数据库名称,则无法完成此操作。不理想。 –

+0

然后我会说看看上面两个选项之一。就个人而言,ADO.NET博客的想法似乎是两者中最好的选择。 –

+0

谢谢,我想我会坚持使用参考文章中的Web.config文件中的connectionstring键。 –