略微偏离 TDD,转而支持 Entity Framework 7
略微偏离 TDD,转而支持 Entity Framework 7
现在我已经为我的位置创建了一个类,我需要一种存储它们的方式。不幸的是,微软出于我尚未理解的原因,决定将 Microsoft Store 应用程序的数据存储为 XML 或 JSON 文本文件。
看看我这个初创项目,我已经可以预见到我可能需要包含其他对象的对象,所有这些对象都需要相互引用——简而言之,这是一个经典的数据库场景。虽然其他平台已经拥抱了轻量级数据库框架 SQLite……微软却没有。完全没有。
查看 NuGet,我发现有数不清的 SQLite .NET 包装器,这使得很难决定选择哪个能够长期存在。然而,还有另一种可能性。还记得我上一段结尾说的“完全没有”吗?那是因为微软将作为 Entity Framework 7 的一部分提供 SQLite 支持——但目前它仅作为预发布版本可用。尽管如此,这似乎是目前最好的选择,而且由于我本身对此也很好奇,所以我会选择这条路线。
为了开始,我将浏览(稀疏的)EF7 文档,网址为 ef.readthedocs.org/en/latest/index.html,但在这里我会做一个快速回顾,供您欣赏。我正在使用 Universal Windows 项目,所以我会
- 将以下特定于应用程序的运行时指令添加到我的 Default.rd.xml 文件中(在项目属性下找到):
<Type Name="System.Collections.ArrayList" Dynamic="Required All" />
。文档说明这在以后将变得不必要,但现在,先把它加进去。 - 安装
EntityFramework.SQLite
和EntityFramework.Commands
的 NuGet 包。两者都是预发布版本,所以请确保使用-pre
选项或勾选允许搜索预发布包的复选框。
准备工作完成后,我使用 EF7 创建我的数据库上下文类。
public class WorldContext : DbContext { public DbSet<Location> Locations { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlite(@"Filename=World.db"); } }
我构建解决方案并使用迁移通过在包管理器控制台中运行 Add-Migration LocationMigration
来创建我的数据库,从而创建我的初始数据库。这实际上需要一些猜测,因为我的 Location
类是在类库中而不是我的主应用程序项目中,但在向主应用程序添加对库的引用后,该命令就可以正常工作了。
现在,我看不出我的类本身有什么可以测试的,但我确实想测试我是否能够使用新的数据上下文执行至少基本的 CRUD 操作。我不认为这些测试可以归类为单元测试,但它们会很有用,所以我将添加它们,并稍后再考虑语义问题。
接下来:测试 CRUD 操作