У меня есть 2 приложения:
- ManagementStudio
- 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);
}