为测试数据库启用迁移

时间:2013-10-15 20:10:33

标签: code-first ef-migrations

在EF4 winforms中,我有一个Datalayer,DomainClasses,UI和Test项目的解决方案 测试项目使用与主项目不同的数据库。

我在UI的app.config中设置了连接字符串名称的主连接字符串。 我在Test项目的app.config中设置了测试连接字符串,并使用相同的连接字符串名称。

我的上下文设置为使用连接字符串名称,如下所示:

public class Context : DbContext
{
    public Context()
        : base("EFTest")    // uses named connection string from app.config
    {  }
    public DbSet<Person> People { get; set; }
    // etc
}

我可以在datalayer项目中启用迁移。但是当我尝试在测试项目中启用项目时,我收到一个错误:

 PM> enable-migrations -ProjectName Test
 No context type was found in the assembly 'Test'.

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您只需在包含DbContext的项目中启用迁移。如果Test项目不包含DbContext,则无需为迁移启用它。

<强>详细

您没有完全指定,但听起来您只使用单个DbContext,并且它位于DataLayer项目中。 Enable-Migrations命令只是创建了允许您自己指定迁移所需的脚手架结构。迁移是单个命名类,它包含应该运行以升级到数据库版本并从数据库版本降级的命令集,而不管您运行它的是哪个数据库(test / live / dev)。因此,您只需使用

为数据层项目运行Enable-Migrations
> Enable-Migrations -ProjectName DataLayer

这些命令存储在DbContext的项目中,并通过比较DbContext属性(如public DbSet<Person> People { get; set; }中的> Add-Migration -ProjectName DataLayer -StartUpProjectName Test 引用的类与数据库结构(以及其他东西,如Fluent API代码)。因此,您很可能希望通过与您的测试(或者甚至是开发)数据库(而不是实时数据库)进行比较来专门生成这些数据,以便执行此操作:

> Update-Database -ProjectName DataLayer -StartUpProjectName [Test|UI]

完成此操作后,您可以使用以下命令运行命令以专门迁移实时或测试数据库:

> get-help Enable-Migrations

与往常一样,get-help(或任何迁移命令的{{1}})列出了所有配置开关以及它们为您做的事情。