【发布时间】:2020-03-09 15:39:04
【问题描述】:
我正在尝试将我的应用程序和身份处理保持在各自独立的上下文中,但我遇到了错误消息
无法为“CUserMasterLocal”创建 DbSet,因为该类型未包含在上下文模型中。
从我的在线研究看来,我需要让ApplicationDBContext 从IdentityDbContext 继承而不是DBContext,但如上所述,我希望必须在自己的上下文中进行身份管理。至少有一篇 Stack Overflow 帖子告诉我这是不允许的,是否有任何社区设法在自己的上下文中保持身份?
这是我的身份上下文:
public class AppIdentityDbContext : IdentityDbContext<CUserMasterLocal, CRoleMasterLocal, string>
{
public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext> options)
: base(options) { }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// Customizations must go after base.OnModelCreating(builder)
var x = builder.Entity<CUserMasterLocal>(config =>
{
// Set the default table name of AspNetUsers
config.ToTable("AspNetUsers");
});
builder.Entity<CRoleMasterLocal>(config =>
{
config.ToTable("RoleMaster");
});
}
public DbSet<CUserMasterLocal> UserMaster { get; set; }
public DbSet<CRoleMasterLocal> RoleMaster { get; set; }
}
在 startup.cs 我有
var identityConnectionString = this.Configuration["Data:VT_LocalIdentityData:ConnectionString"];
services.AddDbContext<AppIdentityDbContext>(options =>
options.UseSqlServer(identityConnectionString));
services.AddIdentity<CUserMasterLocal, CRoleMasterLocal>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
在我的控制器中,我通过“块”隔离了身份活动
using (var localIdContext = new AppIdentityDbContext(optionsBuilder.Options))
{
CUserMasterLocal userMaster = CreateUserMasterEntry(person,
userDetails.GetUsername());
IdentityResult result = this.userManager.CreateAsync(userMaster,
GeneratePassword(12)).Result;
}
为免生疑问,在设置ApplicationDBContext 的类中没有引用CUserMasterLocal,我想保持这种方式。
【问题讨论】:
标签: c# entity-framework-core asp.net-identity asp.net-core-webapi