.mdf文件上的实体框架

时间:2014-10-04 17:47:06

标签: c# sql-server entity-framework

我正在开展一些项目,我必须使用本地数据库。所以,我创建了一个新的基于服务的数据库(没有表atm)。然后我想添加实体框架支持。

因为我之前从未使用过Entity Framework,所以我指的是那个链接:http://msdn.microsoft.com/en-us/data/jj200620.aspx

一切都很好,但这里变得复杂了。我在其中创建了DataContextDbSet。但是,当我运行单元测试时,表在Localdb上创建(不在我的.mdf文件中)。

怎么办?

我很确定,我确实选择了正确使用哪个数据库(实际上已经执行了3次),但仍然在LocalDb上创建了数据表。我在这做错了什么?

我是初学者(仅使用教义ORM)。否则我可以插入数据和所有,它只是在错误的数据库上。

1 个答案:

答案 0 :(得分:6)

当您在EF中进行代码优先开发时,您可以强制EF只考虑一个连接字符串名称。

EF数据上下文父类中的一个构造函数(其中存在相当多的重载)采用一个简单的字符串。

此字符串被指定为要使用的App或Web配置中的连接字符串的名称。

你拨打这样的电话:

using System.Data.Entity;

namespace MSSQL_EFCF.Classes
{
  public class DataAccess : DbContext
  {
    public DataAccess() : base("myConnectionString")
    {}

    public DbSet<MyTableObject> MyObjects { get; set; }

  }
}

您仍然可以在构造函数中放置自己启动所需的任何代码(例如DB Initializer调用),并在基本调用完成后调用所有代码。

以这种方式执行操作的优势迫使实体框架始终使用命名连接字符串,而不是其他任何东西。

这会吸引许多开发人员,以及为什么它运行使用localdb的原因看似简单。

默认情况下,实体框架DbContext将使用数据上下文派生类的名称作为数据库名称,如果它无法通过该名称在任何配置文件中找到合适的连接字符串,则假设您的在没有完整后备数据存储的情况下在开发模式下工作。

在上面的示例中,EF将检查App和/或Web.config以获取名为&#34; myConnectionString&#34;

的连接字符串

一旦做出这个开发决定,它就会知道localdb将会出现,因为它安装了最新版本的visual studio,因此它将自动寻找一个连接并用一个跟随其名称的db填充它。它被使用的背景。

我之前写过一篇关于这个主题的博客文章,你可以在这里找到:

http://www.codeguru.com/columns/dotnet/entity-framework-code-first-simplicity.htm

注意:以上内容适用于使用EF连接的任何数据库,它是决定实际数据存储的内容/位置的连接字符串。