Entity Framework 4.3 Code First 数据库命名

7
我正在使用EF 4.3和Code First方法。在EF 4.3中,推荐使用新的配置部分为上下文初始化连接字符串。我在网上搜索了一些内容,似乎找不到一种方便的方法来使用此方法初始化具有可配置数据库名称的连接。例如,让我们说我在应用程序中有一个MyDBContext实体。我希望它使用连接字符串中指定的数据库名称,如Initial Catalog=MyDB;。使用从EF 4.1开始的旧方法,我可以通过将连接字符串添加到配置文件中的部分来轻松解决这个问题。
<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上下文中,或者我应该继续使用部分?
1个回答

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
通常我不希望数据库名称改变。但是在同一SQL实例上可能会出现数据库名称冲突的情况。此外,如果我想在同一SQL实例上运行多个相同应用程序的实例,则必须重新编译应用程序并更改数据库名称。这并不理想。 - Apoc When
那么我会建议您看看上述两个选项中的一个。就我个人而言,ADO.NET博客的想法似乎是这两个选项中最好的选择。 - James Skemp
谢谢,我想我会按照参考文章中的方法,在Web.config文件中继续使用connectionstring键。 - Apoc When
通常情况下,当我发布应用程序的新版本时,我的客户都希望对测试数据库进行测试,因此必须能够更改数据库名称。 - Olivier Jacot-Descombes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接