gpt4 book ai didi

c# - Entity Framework 4.3 代码优先数据库命名

转载 作者:太空狗 更新时间:2023-10-29 20:42:06 27 4
gpt4 key购买 nike

我使用 EF 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 支持的较新的配置部分,我无法在连接字符串中指定数据库名称。我尝试了以下但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

我知道有一种方法可以通过将值传递给 nameOrConnectionString 来覆盖此默认命名。基础论证DBContext对象。

所以我可以这样做:

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

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

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

最佳答案

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

就是说,我自己还没有遇到过这个问题(我很好地硬编码数据库名称 - 它不应该改变)一种选择是将您想要的数据库名称存储在 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 中应该仍然有效。

关于c# - Entity Framework 4.3 代码优先数据库命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12262895/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com