我使用 Asp.Net Core WebApi 项目 .
我可以将我的表添加到IdentityDbContext,如下所示:
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{ }
public DbSet<ProgrammerRole> ProgrammerRoles { get; set; }
public DbSet<Project> Projects { get; set; }
public DbSet<SubProject> SubProjects { get; set; }
public DbSet<Report> Reports { get; set; }
}
或者我需要创建第二个DbContext . 如果我创建第二个DbContext,我如何与IdentityDbContext中的用户进行通信 .
我的第二个问题:如果我在IdentityDbContext中添加数据,如上所述,如何从ApplicationDbContext中的表中获取数据?因为我每次创建ApplicationDbContext的新实例时都需要传递 DbContextOptions 对象 . 我在 Startup.cs 这样做:
// ===== Add DbContext ========
var connectionString = Configuration.GetConnectionString("DbConnection");
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(connectionString));
我在旧版本的Asp.Net Core中看到,我可以在IdentityDbContext构造函数中传递Connection String,但现在只有DbContextOptions . 我做不到,例如:
[AllowAnonymous]
[HttpGet]
public IEnumerable<Project> GetRoles()
{
using (var db = new ApplicationDbContext())
{
return db.Projects;
}
}
2 回答
是的,这是您创建自定义表的方式 . 您不需要创建另一个
DbContext
. 例如 .Note: 您可能需要运行
dotnet ef migrations add Initial
和dotnet ef database update
才能进行数据库迁移 .您不应该在控制器内创建或管理
ApplicationDbContext
. 如果这样做,它们会紧密耦合,并且您无法实现单元测试 .相反,您让依赖倒置(DI)容器为您管理它 . 例如 .
我解决了我的问题,我只是替换了我的ApplicationDbContext中的代码,并从方法获取连接字符串:
这是资源:https://medium.com/@ozgurgul/asp-net-core-2-0-webapi-jwt-authentication-with-identity-mysql-3698eeba6ff8