.NET Core 2.2 SqlException: недопустимое имя объекта 'ApplicationUsers' - PullRequest
0 голосов
/ 25 июня 2019

У меня есть 2 приложения под названием ManagementStudio и DocumentStudio.Я собрал ManagementStudio в несколько сборок, на которые ссылается DocumentStudio.

Я использую одну и ту же базу данных для обоих приложений, но они разделены разными схемами.Например, ManagementStudio.ApplicationUsers и DocumentStudio.Documents

В DocumentStudio это мой Startup.cs:

services.AddDbContext<DocumentStudioDbContext>(options => options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString)));

string assemblyName = typeof(ManagementStudioDbContext).Namespace;
services.AddDbContext<ManagementStudioDbContext>(options =>
    options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString),
        optionsBuilder =>
            optionsBuilder.MigrationsAssembly(assemblyName)
    )
);
services.AddMvc().AddJsonOptions(options =>
{
    options.SerializerSettings.ContractResolver
        = new Newtonsoft.Json.Serialization.DefaultContractResolver();

});

var lockoutOptions = new LockoutOptions()
{
    DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5),
    MaxFailedAccessAttempts = 5,
};

services.AddDefaultIdentity<ApplicationUsers>(options =>
{
    options.Lockout = lockoutOptions;
})
  .AddEntityFrameworkStores<ManagementStudioDbContext>();

DocumentStudio использует ManagementStudio для входа в систему, поскольку ManagementStudio содержит все пользовательские данные и модель IdentityUser.

Это имя входа на DocumentStudio, которое аналогично ManagementStudio:

private readonly SignInManager<ApplicationUsers> _signInManager;
private readonly UserManager<ApplicationUsers> _userManager;
private readonly ApplicationUsersData applicationUsersData;

public LoginModel(SignInManager<ApplicationUsers> signInManager, UserManager<ApplicationUsers> userManager, ApplicationUsersData applicationUsersData)
{
    _signInManager = signInManager;
    _userManager = userManager;
    this.applicationUsersData = applicationUsersData;
}

public async Task<IActionResult> OnPostAsync(string returnUrl = null){
    var result = await _signInManager.PasswordSignInAsync(Input.UserName, Input.Password, Input.RememberMe, lockoutOnFailure: true);
}

Однако по какой-то причине я получаю ошибку при попытке войти:

enter image description here

Как я могу решить эту проблему?

РЕДАКТИРОВАТЬ:

Добавлены мои ApplicationUsers

public class ApplicationUsers : IdentityUser
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
    public DateTime? DateOfBirth { get; set; }
    private DateTime createdOn = DateTime.Now;
    public DateTime CreatedOn
    {
        get
        {
            return (createdOn == DateTime.MinValue) ? DateTime.Now : createdOn;
        }
        set
        {
            createdOn = value;
        }
    }
    private DateTime updatedOn = DateTime.Now;
    public DateTime UpdatedOn
    {
        get
        {
            return (updatedOn == DateTime.MinValue) ? DateTime.Now : updatedOn;
        }
        set
        {
            updatedOn = value;
        }
    }
}

РЕДАКТИРОВАТЬ 2:

Добавлены мои DbContexts

Document Studio

public DocumentStudioDbContext(DbContextOptions<DocumentStudioDbContext> options) : base(options) { }
public DbSet<Documents> Documents { get; set; }
public DbSet<DocumentCategories> DocumentCategories { get; set; }

ManagementStudio

public ManagementStudioDbContext(DbContextOptions<ManagementStudioDbContext> options) : base(options){}
public DbSet<ApplicationUsers> ApplicationUsers { get; set; }
public DbSet<UserRoles> UserRoles { get; set; }

РЕДАКТИРОВАТЬ 3:

Iподозреваю, потому что DocumentStudio ищет своего собственного ApplicationUser.ApplicationUser имеет смысл только для ManagementStudio.Возможно, решение состоит в том, чтобы переопределить парольsigninasync и иметь тот, который вызывает данные ManagementStudios.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...