Я создаю окно входа в систему для подключения к Oracle из моего приложения (C # Entity Framework Code First из существующей базы данных). Я хочу, чтобы пользователь мог установить свое имя пользователя и пароль для связи с БД. Я попытался изменить строку подключения в моем DbContext, но это не работает. Кажется, что строка подключения изменена, но провайдер возвращает недопустимое исключение логин \ парольКогда я пытаюсь подключить БД с помощью строки подключения, в которой хранится пароль, все в порядке. Я думаю, что есть некоторые причины безопасности для этого поведения. Как я могу корректно изменить строку подключения во время выполнения? Я использую VS 2017, Entity Framework 6, Oracle.ManagedDataAccess 18.3, сервер Oracle 11.2.
App.config
name="ConnStrPass" connectionString="DATA SOURCE=titan;PASSWORD=REALPASS;PERSIST SECURITY INFO=True;USER ID=BEE" providerName="Oracle.ManagedDataAccess.Client"
name="ConnStrNoPass" connectionString="DATA SOURCE=titan;PASSWORD=QWERTY;PERSIST SECURITY INFO=True;USER ID=BEE" providerName="Oracle.ManagedDataAccess.Client"
DBDemoModel.cs
public partial class DBDemoModel : DbContext
{
public DBDemoModel()
: base("name=ConnStrPass")
{
}
//overriding constructor DBDemoModel to change pass in ConnectionString
public DBDemoModel(string pass)
: base("name=ConnStrNoPass")
{
this.Database.Connection.ConnectionString = this.Database.Connection.ConnectionString.Replace("QWERTY", pass);
}
AbonentsFinder.cs // работает нормально
public List<ABONENTS> SelectAbonentsByName(string textToFind)
{
using (DBDemoModel db = new DBDemoModel())
{
var cont = db.ABONENTS.Where(a => a.OWNER.Contains(textToFind));
var abon = cont.ToList();
return new List<ABONENTS>(abon);
}
}
AbonentsFinder.cs // не работает неверное имя пользователя \ login
public List<ABONENTS> SelectAbonentsByName(string textToFind, string pass)
{
using (DBDemoModel db = new DBDemoModel(pass))
{
var cont = db.ABONENTS.Where(a => a.OWNER.Contains(textToFind));
var abon = cont.ToList(); //exception
return new List<ABONENTS>(abon);
}
}
DBDemoModel.cs //System.NotSupportedException
public DBDemoModel(string pass)
: base(new OracleConnection("DATA SOURCE=titan; PASSWORD="+pass+";USER ID=BEE"), true)
{
}