2013-10-15 64 views
0

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

我有用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'. 

我在想什么?

回答

1

您只需在项目中启用包含您的DbContext的迁移。如果测试项目不包含DbContext,则不需要启用它以进行迁移。

详细

您还没有准确地指定,但它听起来像是你只使用单个DbContext,并且它是在数据层项目。命令Enable-Migrations只是简单地创建脚本结构,以便您自己指定迁移。迁移是单个命名类,它包含应该运行以升级到数据库版本和从数据库版本降级的命令集,无论您运行哪个数据库(测试/ 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对于任何迁移命令)列出了所有配置开关,他们为你做什么。