我该如何解决无法为'CUserMasterLocal'创建DbSet,因为此类型不包含在上下文模型中

时间:2019-11-13 19:04:16

标签: c# entity-framework-core asp.net-identity asp.net-core-webapi

我试图将我的应用程序和身份处理保持在各自独立的上下文中,但是我遇到了错误消息

  

无法为“ 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;
}

为免生疑问,在设置CUserMasterLocal的类中未引用ApplicationDBContext,我希望保持这种状态。

1 个答案:

答案 0 :(得分:1)

注册身份服务时,是要让ApplicationDbContext作为EntityFrameworkStores吗?

尝试更换

services.AddIdentity<CUserMasterLocal, CRoleMasterLocal>()
            .AddEntityFrameworkStores<ApplicationDbContext>() // <--- this doesn't seem right.
            .AddDefaultTokenProviders();

services.AddIdentity<CUserMasterLocal, CRoleMasterLocal>()
            .AddEntityFrameworkStores<AppIdentityDbContext>() // <--- this is changed
            .AddDefaultTokenProviders();