更改 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的每类型表继承

EF 4.1 Code First 不会为 List<string> 创建列

EF 4.1 中使用 Code First 的 ComplexType 集合属性