[英]Enable Migrations in Multi-Tier MVC Application
我正在使用MVC 5(剃刀视图),实体框架6(代码优先),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
如上所示,数据包项目I通过在Package Manager控制台中执行Enable-Migrations命令来启用了迁移。 问题是,它仅编写与身份相关的模型的脚本(AspNetUserRoles,AspNetUserLogins等)。 迁移如何知道包括实体? 我需要它来为我的Domain项目中的模型编写脚本,并且不太确定如何告诉EF / Migrations这样做。
更新:
根据一个请求,我下面的简单(即装即用,通过新项目提供的支架)DbContext类:
public class MyDbContext : IdentityDbContext<ApplicationUser>
{
public MyDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static MyDbContext Create()
{
return new MyDbContext();
}
}
问题是,它仅编写与身份相关的模型的脚本(AspNetUserRoles,AspNetUserLogins等)。 迁移如何知道包括实体?
迁移“知道”要编写的内容,因为它基于每个上下文编写脚本。 查看Migrations文件夹中的Configuration.cs
类,您会注意到它是具有DbContext
类型的通用类,如下所示:
internal sealed class Configuration : DbMigrationsConfiguration<MyDbContext>
因此它“知道”,因为您通过传入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
。 但是,然后您将必须按照如何为多个上下文将EF迁移启用到单独的数据库中来明确启用和更新迁移?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.