# 一、设置

## 在我们开始之前

在开始使用 EFCF 之前，您需要在本地部署它的程序集。微软和其他一些公司遵循的分发模式并不依赖于老式的 Windows 安装程序，而是依赖于新技术，如 [NuGet](http://www.nuget.org/) 和 [Git](http://git-scm.com/) 。我们稍后将尝试理解这些选项中的每一个，但是在我们开始之前，请确保您已经安装了 Visual Studio 2012(包括 Visual Web Developer Express 在内的任何版本都可以工作)，以及 SQL Server 2008(包括 Express 在内的任何版本)或更高版本。在 SQL Server 上，创建一个名为**的新数据库。**

## 首先从 NuGet 获取实体框架代码

[NuGet](http://www.nuget.org/) 是为了。NET 包管理实体框架对于数据访问来说是什么。简而言之，它允许 Visual Studio 项目依赖于软件包——程序集、源代码文件、PowerShell 脚本等。—存储在远程存储库中。EFCF 有自己的程序集，部署在常规。NET 版本。要将其安装到现有项目，首先从**工具** > **库包管理器**运行**包管理器控制台**，并输入以下命令。

![](img/image001.png)

这是部署实体框架代码优先的首选方案。

| ![](img/tip.png) | 提示:这仅适用于现有项目，不适用于空解决方案。 |

## 首先从 CodePlex 获取实体框架代码

第二个选项，对于高级用户，是在 [CodePlex](https://entityframework.codeplex.com/) 上克隆实体框架代码 First 存储库，自己构建二进制文件，手动添加对生成的程序集的引用。

首先，让我们从使用您喜欢的 Git 客户端克隆 Git 存储库开始。

```cs
git clone https://git01.codeplex.com/entityframework.git

```

接下来，使用以下两个命令从命令行构建所有内容。

```cs
  build /t:RestorePackages /t:EnableSkipStrongNames
  build

```

也可以启动 Visual Studio 2012，打开 **EntityFramework.sln** 解决方案文件。这样，您可以用源代码进行自己的实验，编译程序集的调试版本，运行单元测试，等等。

## 配置数据库

实体框架与数据库无关，但标准版本仅包括微软技术的提供者。这意味着只支持 SQL Server 2005+， [SQL Server Compact Edition](http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/compact.aspx) ， [SQL Server Express LocalDB](http://technet.microsoft.com/en-us/library/hh510202.aspx) 。本书中的例子将适用于这些版本。请确保您安装了其中的一个，并且您具有适当的管理权限。

实体框架通过执行以下算法来决定使用什么连接。

*   如果在[数据库上下文](http://msdn.microsoft.com/en-us/library/system.data.entity.dbcontext.aspx)的构造函数中传递了一个连接字符串，那么它将尝试在默认连接工厂中使用该连接字符串。
*   如果使用无参数构造函数，它将在配置文件中查找连接字符串，其中它的名称与上下文的类相同。
*   如果没有传递连接字符串，并且在连接字符串中找不到具有适当名称的连接字符串，它将尝试连接到名为 SQLEXPRESS 的 SQL Server 实例和与上下文类同名的数据库，包括命名空间。

连接工厂是位于众所周知的位置:[数据库的](http://msdn.microsoft.com/en-us/library/system.data.entity.database.defaultconnectionfactory.aspx) [IDbConnectionFactory](http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.idbconnectionfactory.aspx) 的实现。默认连接工厂。此实例可以显式设置，如果特定的数据库引擎需要，则应该设置。这可以通过代码或在配置文件中设置一个值来完成。

```cs
<entityFramework>
  <defaultConnectionFactory
  type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework" />
</entityFramework>

```

### SQL Server

对于连接到 SQL Server，不需要特殊操作。默认[数据库。默认连接工厂](http://msdn.microsoft.com/en-us/library/system.data.entity.database.defaultconnectionfactory.aspx)已经是[的一个实例](http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.sqlconnectionfactory.aspx)。

如果您想在配置文件中有一个连接字符串，您应该使用提供者名称**“System”。如下例所示。**

```cs
<connectionStrings>
  <add name="Succinctly"
  connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;
  Initial Catalog=Succinctly;MultipleActiveResultSets=true" 
  providerName="System.Data.SqlClient" />
</connectionStrings>

```

### SQL Server 精简版

SQL Server Compact Edition (SQLCE)是一个占用空间小、免费的嵌入式数据库，它支持的 SQL 语法与其全功能同级几乎相同。如果您想使用它，请确保您已经安装了 SQL Server Compact Edition 下载网址为[http://www . Microsoft . com/en-us/SQL server/editions/2012-editions/compact . aspx](http://www.microsoft.com/en-us/sqlserver/editions/2012-editions/compact.aspx)。

| ![](img/tip.png) | 提示:SQLCE 一次只接受一个连接。 |

如果要连接到 SQLCE，需要使用**系统注册连接字符串。Data.SqlServerCe.4.0** 提供程序。

```cs
<connectionStrings>
  <add name="Succinctly"
  connectionString="Data Source=Succinctly.sdf"
  providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

```

如果要将完整的连接字符串作为参数传递给上下文，请确保使用以下代码将默认连接工厂设置为 [SqlCeConnectionFactory](http://msdn.microsoft.com/en-us/library/system.data.entity.infrastructure.sqlceconnectionfactory.aspx) 实例。

```cs
Database.DefaultConnectionFactory = new SqlCeConnectionFactory
("System.Data.SqlServerCe.4.0");

```

或者通过以下配置。

```cs
<entityFramework>
  <defaultConnectionFactory
  type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
    <parameters>
      <parameter value="System.Data.SqlServerCe.4.0" />
    </parameters>
  </defaultConnectionFactory>
</entityFramework>

```

SQLCE 将寻找并创建一个名为 *<数据库>* 的文件。项目 Bin 目录中的 sdf。

### SQL Server 2012 Express LocalDB

与 SQL Server 2012 Express 一起发布的 LocalDB 数据库，它也是一个占地面积小、功能齐全的服务器，不使用任何服务。如果还没有，可以从[http://www.microsoft.com/en-us/download/details.aspx?下载安装程序 id=29062](http://www.microsoft.com/en-us/download/details.aspx?id=29062) 。

| ![](img/tip.png) | 提示:LocalDB 一次只接受一个连接。 |

要连接到本地数据库实例，您需要一个与连接到 SQL Server 时非常相似的连接字符串，包括提供程序名称。您可以指定要使用的本地数据库版本，而不是 SQL Server 实例。

```cs
<connectionStrings>
  <add name="Succinctly"
  connectionString="Data Source=(localdb)\v11.0;Integrated Security=SSPI;
  Initial Catalog=Succinctly;MultipleActiveResultSets=true" 
  providerName="System.Data.SqlClient" />
</connectionStrings>

```

没有必要配置默认的连接工厂，因为本地数据库使用与默认的 SQL Server 相同的连接工厂。

LocalDB 将寻找并使用名为 *<数据库>* 的数据库文件。mdf 和事务日志 *<数据库>* _log.ldf，都位于文件夹%USERPROFILE%中，除非通过指定 AttachDBFilename 参数明确位于其他地方。

```cs
<connectionStrings>
  <add name="Succinctly"
  connectionString="Data Source=(localdb)\v11.0;Integrated Security=SSPI;
  MultipleActiveResultSets=true;AttachDBFilename=C:\Windows\Temp\Succinctly.mdf" 
  providerName="System.Data.SqlClient" />
</connectionStrings>

```

| ![](img/note.png) | 注意:本地数据库文件与 SQL Server 文件完全兼容。 |