2016-11-19 2 views
1

Сначала я использую Oracle DB с кодом EF 6. И сделал собственное шифрование в строке подключения. строка соединения хранит в отдельном конфигурационном файле «connstring.config»: Там является четкая строка подключения без шифрованияСтрока Entity Framework и строка подключения с пользовательским шифрованием

<?xml version="1.0" encoding="utf-8" ?> 
<connectionStrings> 
    <add name="MyConnString" connectionString="Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True;" 
    providerName="Oracle.ManagedDataAccess.Client" /> 
</connectionStrings> 

источников данных в файле web.config.

MyDbcontext:

public static string GetConnectionString() 
{ 
    string encodedConnStr = ConfigurationManager.ConnectionStrings["MyConnString"].ConnectionString.ToString(); 
    string result = Crypto.Decrypt(encodedConnStr); 
    return result; 
} 
public MyDbContext() : base(GetConnectionString()){} 

И когда я бегу приложение Я получаю ошибку сервера: Не удалось завершить операцию. В поставляемом SqlConnection не указывается начальный каталог или AttachDBFileName.

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

+0

Debug приложение: ваша строка соединения дешифрования правильно? Работает ли сама строка connectino? Сделайте веб-поиск в сообщении об ошибке. – Igor

+0

Да, дешифрование работает правильно. Я попытался набирать строки подключений непосредственно в базе, то же самое – Drake

+0

результат возвращает правильную строку подключения. Ошибка при вызове DbContext – Drake

ответ

1

Поскольку вы передаете строку соединения непосредственно в конструктор DbContext, вам необходимо предоставить его поставщику базы данных, иначе он не знает, для какого типа базы данных он создает соединения. Самое простое - это изменить строку соединения, вы можете сделать это пост-шифрование в своем статическом методе или в вашей зашифрованной строке соединения. Основываясь на вашем соединении выше, я считаю, что oracle.manageddataaccess.client является правильным провайдером, но проверьте его и посмотрите.

Provider=oracle.manageddataaccess.client;Data Source=MySource;User ID=UserID;Password=Password;PERSIST SECURITY INFO=True 

Вы также можете попробовать вещь в соответствии с этим другой ответ, который я нашел на SO: How to set manually an Oracle Connection String in a DbContext

class MyDbContext: DbContext 
{ 
    public MyDbContext() : base(new OracleConnection(GetConnectionString()){} 
    ... 
} 

Если вы по-прежнему возникают проблемы обновления вопрос только с соответствующими частями : вы не можете создать экземпляр DbContext, когда вы вручную указываете строку подключения. Как написано сейчас, очень легко сделать предположение, что ваша проблема связана с шифрованием/расшифровкой, но они не имеют отношения к реальной проблеме.

1

Она была решена путем установки defaultConnectionFactory в

Oracle.ManagedDataAccess.EntityFramework.OracleConnectionFactory, Oracle.ManagedDataAccess.EntityFramework 
Смежные вопросы