Ошибка при работе с базой данных .NET при входе в систему - PullRequest
0 голосов
/ 25 июня 2019

У меня есть 2 приложения:

  1. ManagementStudio
  2. DocumentStudio

DocumentStudio ссылается на dll ManagementStudio. Функция управления учетными записями находится в ManagementStudio, поэтому, если я хочу войти в систему из DocumentStudio, она привязана к одной из библиотек в ManagementStudio.

Прямо сейчас, это ошибка, которую я получаю, когда пытаюсь войти в систему из DocumentStudio:

Операция базы данных завершилась неудачно при обработке запроса. SqlException: недопустимое имя объекта «ApplicationUsers». Есть ожидающие изменения модели для ManagementStudioDbContext В Visual Studio, используйте Консоль диспетчера пакетов, чтобы создать новую миграцию для этих внесите изменения и примените их к базе данных:

PM> Add-Migration [имя миграции] PM> Update-Database. Альтернативно, вы можете создать новую миграцию и применить ее из командной строки по адресу каталог вашего проекта:

dotnet ef migrations добавить [имя миграции] Обновление базы данных dotnet ef

Ранее я уже запустил все миграции для ManagementStudio. Тем не менее, я обнаружил, что если я вернусь и добавлю еще одну миграцию, у меня вдруг появится куча «Удалить данные» и «Вставить данные» того же самого. Как и в случае, данные удалены и введены одинаковы.

Когда я выполняю миграцию и обновляю базу данных, происходит та же ошибка. Я не уверен, как решить эту проблему.

Структура моей базы данных такая:

Есть 2 схемы. ManagementStudio. [Имя] и DocumentStudio. [Имя]

My Startup.cs

 public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<DocumentStudioDbContext>(options => options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString)));
    services.AddDbContext<ManagementStudioDbContext>(options => options.UseSqlServer(Environment.GetEnvironmentVariable(DSCASGlobals.DS_ConnectionString)));

    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>();

    services.AddScoped<DbContext, DocumentStudioDbContext>();
    services.AddScoped<CustomClaimsCookieSignInHelper<ApplicationUsers>>();
    services.Configure<CookiePolicyOptions>(options =>
    {
        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
        options.CheckConsentNeeded = context => false;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.Configure<IdentityOptions>(options =>
    {
        options.Password.RequireDigit = false;
        options.Password.RequireLowercase = false;
        options.Password.RequireNonAlphanumeric = true;
        options.Password.RequireUppercase = true;
        options.Password.RequiredLength = 6;
        options.User.AllowedUserNameCharacters =
        "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
        options.User.RequireUniqueEmail = false;
        options.SignIn.RequireConfirmedEmail = false;
        options.SignIn.RequireConfirmedPhoneNumber = false;
    });

    services.AddDataProtection()
        //.PersistKeysToFileSystem(KeyRingConfigurationManager.GetBasePath(Environment.GetEnvironmentVariable("CENTRAL_APPLICATION_SETTINGS")))
        .PersistKeysToFileSystem(ResolvePaths.GetBasePathDI(Environment.GetEnvironmentVariable(DSCASGlobals.CentralApplicationSettings), "KeyRing"))
        .SetApplicationName(Environment.GetEnvironmentVariable(DSCASGlobals.DataProtectionApplicationName));

    services.ConfigureApplicationCookie(options =>
    {
        // Cookie settings
        options.Cookie.Name = Environment.GetEnvironmentVariable(DSCASGlobals.CookieName);
        options.Cookie.SameSite = SameSiteMode.Lax;
        options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
        options.Cookie.Path = Environment.GetEnvironmentVariable(DSCASGlobals.CookiePath);
        options.Cookie.Domain = Environment.GetEnvironmentVariable(DSCASGlobals.CookieDomain);
        options.Cookie.HttpOnly = true;
        options.ExpireTimeSpan = TimeSpan.FromMinutes(Convert.ToDouble(Environment.GetEnvironmentVariable(DSCASGlobals.CookieExpiryTimeSpanInMinutes)));

        options.LoginPath = Environment.GetEnvironmentVariable(DSCASGlobals.LoginPath);
        options.AccessDeniedPath = Environment.GetEnvironmentVariable(DSCASGlobals.AccessDeniedPath);
        options.SlidingExpiration = true;
    });


    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

1 Ответ

0 голосов
/ 25 июня 2019

вам необходимо использовать IdentityUser, пожалуйста, прочтите документ.

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/customize-identity-model?view=aspnetcore-2.2#custom-user-data

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