更改 EF 4.1 Code First 默认数据库位置
Posted
技术标签:
【中文标题】更改 EF 4.1 Code First 默认数据库位置【英文标题】:Change EF 4.1 Code First Default DB Location 【发布时间】:2011-04-12 02:53:23 【问题描述】:我正在阅读 MSDN 上的 Building an MVC 3 App with Code First and Entity Framework 4.1 教程,但遇到了“另外默认情况下,此数据库将是 SQL Express 数据库,其名称为派生来自上下文的强类型名称,其文件将位于 SQL Express 默认数据文件夹中。”
如果我想更改默认设置(例如,将 MDF 文件放在我的 App_Data 文件夹中),我该怎么做?我将有几个不同的上下文(每个主要功能领域一个),并希望它们都存在于同一个数据库中。
【问题讨论】:
【参考方案1】:您可以使用 web.config 文件连接设置来定义数据库所在的位置。 您只需要使 Context Name = 您的连接字符串名称,因此如果您的 Context 是 MyContext,您可以如下定义位置:
<connectionStrings>
<clear/>
<add name="MyContext"
connectionString="Server=myServer;Database=MyDB;Uid=foo;Password=XXX; "
providerName="System.Data.SqlClient"
/>
</connectionStrings>
【讨论】:
如果我希望所有上下文都存在于同一个物理数据库中,我是否只需提供具有适当name
元素和相同connectionString
元素的多个条目?
我从未尝试过,但是是的,这听起来应该可以工作,您只需要注意您的数据库初始化,它不会尝试删除并为每个上下文创建数据库吗?即您可能必须使用 CreateDatabaseIfNotExists 而不是 DropCreateDatabaseIfModelChanges 或 DropCreateDatabaseAlways【参考方案2】:
回答你的第二个问题...
“我将有几个不同的上下文(每个主要功能区域一个),并希望它们都存在于同一个数据库中。”
为什么不试试……
MyContext.cs
public partial class MyContext : DbContext
FooContext.cs
partial class MyContext
public DbSet<Foo> Foos get; set;
BarContext.cs
partial class MyContext
public DbSet<Bar> Bars get; set;
您最终会得到一个上下文和一个连接,但您的代码被拆分为多个文件。希望这就是您想要实现的目标。
【讨论】:
以上是关于更改 EF 4.1 Code First 默认数据库位置的主要内容,如果未能解决你的问题,请参考以下文章
EF 4.1 Code First - 在 Firebird 数据库中存储图像
如何使用 Code-First EF 4.1 从数据库中删除多个项目
EF 4.1 RC Code First - 映射到现有数据库并指定外键名称
使用EF 4.1 Fluent Code First的每类型表继承