使IdentityFramework,IDesignTimeDbContextFactory,.NetCore 2.1和DbContext一起玩

时间:2018-09-25 21:11:46

标签: c# entity-framework .net-core

我有一个现有的.Net核心项目,在其中将DBContext分解为它自己的库。在这个项目中,我使用IDesignTimeDbContextFactory为类库创建DbContext。这使我可以使用诸如add-migration和update-database之类的命令,尽管实际上并没有实际的appsettings.json或app.config文件可用来从中提取连接字符串。

我现在遇到的问题是我想做同样的事情,只是这次添加了IdentityFramework。从我可以在线阅读的内容来看,执行此操作的标准方法是放弃简单的旧DbContext,并使所有内容都从IdentityDbContext继承。直到我尝试添加IDesignTimeDbContextFactory为止,这似乎都是可以的。 IDesignTimeDbContextFactory需要DBContext,并且不能使用IdentityDbContext。

我如何拥有一个支持IdentityFramework和IDesignTimeDbContextFactory的类库?有人举个例子吗?

我的项目结构为: 网页 .api .Models(包含身份模型)

public class AppUser : IdentityUser
{
    public string MyExtraProperty { get; set; }
}


public class AppRole : IdentityRole
{
    public AppRole() : base() { }
    public AppRole(string name) : base(name) { }
}

.Service(包含DbContext和Identity Framework)

ApplicationDbContext

public class ApplicationDbContext : IdentityDbContext<AppUser>
{
     public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false)
     {
     }

     public static ApplicationDbContext Create()
     {
            return new ApplicationDbContext();
     }
 }

DBContextFactory (不喜欢ApplicationDbContext)

public class DBContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
    public ApplicationDbContext CreateDbContext(string[] args)
    {
        var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
        builder.UseSqlServer(
            @"Server=(localdb)\MSSQLLocalDB;Database=IdentityFrameWork;AttachDBFilename=IdentityFramework.mdf;Trusted_Connection=True;MultipleActiveResultSets=true;");

    }
}

我需要一个单独的.Net Standard类中的.Net Core和Identity框架的工作示例。有人可以帮我吗?

Git Hub Link

1 个答案:

答案 0 :(得分:0)

Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityDbContext继承自Microsoft.EntityFrameworkCore.DbContext,就像您看到的here一样,这使我想知道您是否正在使用Identity Framework和AspNet.Identity.EntityFramework6.IdentityDbContext的早期版本?