我正在使用MVC 5(Razor Views),Entity Framework 6(Code First),ASP.Net Identity 2.0和Web API创建一个新的应用程序。为了创建一个体面的解耦架构,我想在我的数据层中启用迁移,但我对迁移的工作方式存在误解。这是我的基本解决方案架构:
MyApplication Solution
|-Domain Project
|-Entity1
|-Entity2
|-Entity3
|-Data Layer Project (References Domain Project)
|-DbContext (Inherits from IdentityDbContext)
|-Migrations Folder
|-Service Layer Project (Web API)
|-Business Layer Project
|-MVC Project
|-Views
如上所示,数据层项目我通过在程序包管理器控制台中执行Enable-Migrations命令启用了迁移。问题是,它只编写与Identity相关的模型(AspNetUserRoles,AspNetUserLogins等)。迁移如何知道包含实体?我需要它来编写我的Domain项目中的模型脚本,并且不太确定如何告诉EF / Migrations这样做。
更新
根据请求,我的简单(通过新项目搭建的开箱即用)下面的DbContext类:
public class MyDbContext : IdentityDbContext<ApplicationUser>
{
public MyDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static MyDbContext Create()
{
return new MyDbContext();
}
}
答案 0 :(得分:1)
问题是,它只编写与Identity相关的模型 (AspNetUserRoles,AspNetUserLogins等)。如何了解迁移 包括一个实体?
迁移&#34;知道&#34;什么编写脚本,因为它基于每个上下文脚本。查看Migrations文件夹中的Configuration.cs
类,您会注意到它是传递DbContext
类型的泛型类,如下所示:
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
所以它&#34;知道&#34;因为您通过传递MyDbContext
泛型类型参数来明确告诉它。
因此,如果您要添加自己的实体类进行迁移,那么DbSet
中的每个实体都应该有DbContext
。即。
public class MyDbContext : IdentityDbContext<ApplicationUser> {
public DbSet<Entity1> Entity1s {get;set;}
public MyDbContext()
: base("DefaultConnection", throwIfV1Schema: false){}
public static MyDbContext Create()
{
return new MyDbContext();
} }
如果您不想重复使用MyDbContext作为自定义用户,那么您可以创建另一个上下文,并将实体DbSet
添加到其中。但是,您必须根据How do I enable EF migrations for multiple contexts to separate databases?