实体框架4.3代码首先是数据库命名

Apo*_*hen 7 c# entity-framework ef-code-first

我正在使用EF 4.3和Code第一种方法.

对于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"/>
Run Code Online (Sandbox Code Playgroud)

如果我想使用EF 4.3支持的更新的配置部分,我无法在连接字符串中指定数据库名称.我尝试了以下但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>
Run Code Online (Sandbox Code Playgroud)

我的codefirst方法因使用它而创建的默认数据库名称是 MyNamespace.MyDBContext

我知道有一种方法可以通过将值传递给nameOrConnectionString基础DBContext对象上的参数来覆盖此默认命名.

所以我可以这样做:

public MyDBContext() : base("MyDB") { }
Run Code Online (Sandbox Code Playgroud)

但是,如果我采用这种方法,我最终将数据库名称硬编码到我的应用程序中,我个人不喜欢这样.

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

Jam*_*emp 0

您认为数据库名称多久需要更改一次?

也就是说,我自己还没有遇到这个问题(我很好地对数据库名称进行硬编码 - 它不应该改变)一种选择可能是将您想要的数据库名称存储在 Web.config 中作为应用程序设置,然后让您的代码从那里提取值。

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

public UnicornsContext()
    : base("name=UnicornsCEDatabase")
{
}
Run Code Online (Sandbox Code Playgroud)

这样就可以拉出具有该特定名称的连接字符串:

<configuration>
<connectionStrings>
    <add name="UnicornsCEDatabase"
        providerName="System.Data.SqlServerCe.4.0"
        connectionString="Data Source=Unicorns.sdf"/>
</connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

根据http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx,这应该在4.3中仍然有效。