我使用 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 构造函数中传递连接字符串,但现在只有 DbContextOptions。
而我做不到,例如:
[AllowAnonymous]
[HttpGet]
public IEnumerable<Project> GetRoles()
{
using (var db = new ApplicationDbContext())
{
return db.Projects;
}
}
最佳答案
是的,这就是您创建自定义表的方式。您不需要创建另一个 DbContext
。例如。
public class Project
{
public int Id { get; set; }
public string Name { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
public DbSet<Project> Projects { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Project>(entity =>
{
entity.Property(e => e.Name)
.IsRequired()
.HasMaxLength(50);
});
base.OnModelCreating(builder);
}
}
注意: 您可能需要运行
dotnet ef migrations add Initial
和 dotnet ef database update
以进行数据库迁移。您不应在 Controller 内创建或管理
ApplicationDbContext
。如果这样做,它们将变得紧密耦合,并且您无法实现单元测试。相反,您让依赖倒置 (DI) 容器为您管理它。例如。
public class UserController : Controller
{
private readonly ApplicationDbContext _context;
public UserController(ApplicationDbContext context)
{
_context = context;
}
[AllowAnonymous]
[HttpGet]
public IEnumerable<Project> GetRoles()
{
return _context.Projects;
}
}
关于Asp.Net 核心 : Add data to IdentityDbContext or use DbContext,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50377705/