繁体   English   中英

在多层MVC应用程序中启用迁移

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM