0

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

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

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

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

我可以在数据层项目中启用迁移。但是,当我尝试在测试项目中启用项目时,出现错误:

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

我错过了什么?

4

1 回答 1

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; }与数据库结构以及其他内容,例如 Fluent API 代码)进行比较来生成这些命令。因此,您很可能希望通过与您的测试(甚至可能是开发)数据库而不是实时数据库进行比较来专门生成这些,为此您可以这样做:

> Add-Migration -ProjectName DataLayer -StartUpProjectName Test

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

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

与往常一样,> get-help Enable-Migrations(或get-help任何迁移命令)列出所有配置开关以及它们为您做什么。

于 2013-10-17T10:13:18.453 回答