在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'.
我错过了什么?
答案 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}})列出了所有配置开关以及它们为您做的事情。