65.9K
CodeProject 正在变化。 阅读更多。
Home

略微偏离 TDD,转而支持 Entity Framework 7

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2015 年 12 月 14 日

CPOL

2分钟阅读

viewsIcon

8307

略微偏离 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.SQLiteEntityFramework.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 操作

© . All rights reserved.