.mdf文件上的实体框架

Oro*_*chi 1 c# sql-server entity-framework

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

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

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

该怎么办?

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

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

sha*_*wty 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; }

  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

这会抓住许多开发人员的原因,以及为什么它运行使用localdb看起来很简单.

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

在上面的示例中,EF将检查App和/或Web.config以获取名为"myConnectionString"的连接字符串

一旦做出这个开发决定,它就会知道localdb将会出现,因为它安装了最新版本的visual studio,因此它将自动寻找一个连接,并用一个db来填充它,该db遵循上下文的名称.它被使用了.

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

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

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