使用 Entity Framework 7 的 CodeFirst 与 SQLite






4.86/5 (16投票s)
本技巧演示了如何在桌面和移动应用程序上使用 Entity Framework 7 内置的 SQLite 堆栈。
引言
本技巧演示了使用 SQLite 数据库的 CodeFirst 模式。
在 Microsoft Entity Framework 7 之前,所有之前的版本都缺少对 SQLite 的内置支持。尽管 SQLite 通过自己的扩展支持 EntityFramework,但与出色的 MS SQL Server 支持相比,总会缺少一些功能。CodeFirst 只是一个例子。
背景
Entity Framework 7 是一个非常特别的版本,因为它基于完全重新设计的代码库。它不仅支持更多数据库和平台(包括 Xamarin)。设置已经变得简单直接。因此,本技巧的想法不是提供一个可运行的解决方案,而是通过逐步说明来支持您使用 Entity Framework 7 和 SQLite。
安装
要设置 EF7 解决方案,只需创建一个 C# 类库、WPF 应用程序或 Windows 窗体应用程序。
单击“文件 > 新建 > 项目”并选择您要使用的项目模式,或者直接使用现有的解决方案。
Entity Framework 7 已经成为一个模块化的代码库。要开始编码,请使用 NuGet 包管理器下载最新版本。安装 EF7 需要 NuGet 2.8.6(或更高版本)。确保在安装更新后重新启动 Visual Studio。
- Visual Studio 2015 - 无需更新,包含兼容的 NuGet 版本
- Visual Studio 2013 - 为 VS2013 安装最新的 NuGet
- Visual Studio 2012 - 为 VS2012 安装最新的 NuGet
现在您可以安装 EF7 了
- 在解决方案资源管理器中右键单击您的解决方案。
- 选择“管理解决方案的 NuGet 包”。
- 在导航中单击“在线”,并确保选择了 nuget.org。
- 将“仅稳定版”过滤器替换为“包括预发布版”。
- 搜索“
EntityFramework.SQLite
”并在您的项目中安装该包。
最后一步是 SQLite 库本身。过去,在 system.data.sqlite.org
上有特殊的 ADO.NET 提供程序。使用 EF7,您可以使用 www.sqlite.org/download.html 上默认的预编译 SQLite 库。将此库添加到您的项目中
- 在解决方案资源管理器中右键单击您的项目,然后选择“添加 > 现有项目”
- 选择
SQLite.dll
并单击“确定”。 - 右键单击解决方案资源管理器中现在添加的文件,然后选择“属性”。
- 对于“生成操作”,选择
Content
,对于“复制到输出目录”,选择如果较新则复制
。
编码
EntityFramework 是一个 ORM 框架。这意味着它将数据库元素映射到代表数据库的类。Entity Framework 将数据库映射到两个主要类
Entity
类表示数据库中的表结构。Context
类表示您的数据库。
这些类是开始工作所需的最小集合。
可以使用以下代码定义第一个简单表。这是我们的第一个实体
public class MyEntity
{
public string MyColumn { get; set; }
}
上下文是一个继承自 DbContext
的类。属性 MyTable
将类 MyEntity
定义为数据库的表。方法 OnConfiguring
将上下文与数据库连接起来
public class MyContext: DbContext
{
// This property defines the table
public DbSet<MyEntity> MyTable {get;set;}
// This method connects the context with the database
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionStringBuilder = new SqliteConnectionStringBuilder {DataSource = "test.db"};
var connectionString = connectionStringBuilder.ToString();
var connection = new SqliteConnection(connectionString);
optionsBuilder.UseSqlite(connection);
}
}
现在,上下文已连接到数据库 test.db,该数据库将位于应用程序二进制文件所在的同一目录中。当然,数据库尚不存在。当然,这就是 CodeFirst 模式的名称来源。以下代码段创建数据库
using (var db = new MyContext())
{
db.Database.EnsureCreated();
}
结果,创建了一个名为 test.db 的 SQLite 文件。仅此而已。
关注点
我们现在创建了一个非常简单的数据库,其中包含一个包含一列的表。现在有趣的是如何添加数据、定义主键、创建索引等...
历史
- 第一次修订