我的解决方案中有一个BaseDbContext
,其他所有DbContexts
都从中继承:
public BaseDbContext(string connectionstringName): base(connectionstringName)
{
....
}
最近我添加了以下DbConnectionFactory
来解密我的配置文件中的加密connectionstring
(我将配置文件加密一次):
public class EncryptedDbConnectionFactory : IDbConnectionFactory
{
public EncryptedDbConnectionFactory()
{
}
#region IDbConnectionFactory implementation
public DbConnection CreateConnection(string nameOrConnectionString)
{
var connectionStringName = nameOrConnectionString.Replace("name=","");
//Decrypt method get connectionstringName, and find connectionstring from config
//and decrypt it
var decryptedConnectionString = Decrypt(connectionStringName);
var connection= new SqlConnection(decryptedConnectionString);
return connection;
}
#endregion
}
并按照DefaultConnectionFactory
类:
DbConfiguration
public class MyConfig : DbConfiguration
{
public UseConnectionStringsConfig(bool useEncryptedDbConnectionFactory)
{
if (useEncryptedDbConnectionFactory)
{
SetProviderServices("System.Data.SqlClient",
System.Data.Entity.SqlServer.SqlProviderServices.Instance);
SetDefaultConnectionFactory(new EncryptedDbConnectionFactory(configuration));
}
else
{
//use sqlConnectionFactory
}
}
}
并在我的MyConfig
开始时致电program.cs
(我也从defaultConnectionFactory
删除了app.config
部分):
DbConfiguration.SetConfiguration(new MyConfig(true));
当我运行程序时,当控件到达var context = new MyContext();
行时,我会得到以下异常:
抛出异常:' System.ArgumentException'在System.Data.dll
中附加信息:初始化字符串的格式不符合从索引0开始的规范。
如果我将BaseDbContext
更改为:
public BaseDbContext(string connectionstringName)
: base(Database.DefaultConnectionFactory
.CreateConnection(connectionstringName), true)
{
}
程序运行没有任何异常;但是使用Database.DefaultConnectionFactory
作为DbContext
构造函数的参数,我收到以下警告:
' Database.DefaultConnectionFactory'已过时:'应在配置文件中或使用DbConfiguration类设置默认连接工厂。 (见http://go.microsoft.com/fwlink/?LinkId=260883)
我有两个问题:
Database.DefaultConnectionFactory
作为DbContext
构造函数的参数)BaseDbContext
无法正常工作?答案 0 :(得分:0)
予。警告解释说。你不应该使用Database.DefaultConnectionFactory = new EncryptedDbConnectionFactory(true)
。你应该在配置文件中设置它:
<entityFramework>
<defaultConnectionFactory type="YourNamespace.EncryptedDbConnectionFactory, YourAssembly">
<parameters>
</parameters>
</defaultConnectionFactory>
<providers>
........
</providers>
</entityFramework>
II。异常的原因是连接字符串的格式不正确。检查您的解密方法,看看您的最终连接字符串格式是否正确。