我知道这里的默认返回值是SQL Server数据库类型,但是我需要MySQL数据库类型,问题是创建指定数据库类型的DbContext
实例吗?
当然,我知道也可以通过指定connectionName
来创建它,但是数据库连接字符串已加密,并且需要解密该字符串
伪代码如下:
public partial class MyDbContext : DbContext
{
static string mysqlConn = ReadConnectionString(); //Get the encrypted MySQL connection string
public MyDbContext() : base(mysqlConn)
{
// Even if I want to modify the connection string in this way, nor will it throw a connection string malformed exception
Database.Connection.ConnectionString = DecryptConnectionString(mysqlConn);
}
}
答案 0 :(得分:0)
好吧,这是关于我的期望,我的问题很少可以回答。
尽管我对EntityFramework不太熟悉,但是通过查看DbContext的源代码,我几乎可以确定这是一个设计缺陷,但它缺少这样的构造函数:
Public DbContext(string connectionString, string providerName)
答案 1 :(得分:0)
致 Serg Sh : 感谢您抽出宝贵的时间研究此问题。我看到了您提供的解决方案。通过构造连接字符串,最终方法仍然是:
Public DbContext(string nameOrConnectionString)
正如我之前所说,此方法返回SQLServer数据库类型。我坚持认为DbContext设计存在问题。 Microsoft应该删除此方法,并实现以下方法组:
//name of the connection string in the configuration file, Will automatically create a specific type of database connection based on the providerName of the configuration file
Public DbContext (string connectionName)
//connection string, the default returns SQLServer database type, namely: providerName = "System.Data.SqlClient"
Public DbContext (string connectionString)
//Connection string and data provider name
Public DbContext(string connectionString, string providerName)
如果不是这种情况,则无法逃脱DbContext构造函数的陷阱。
事实上,在问这个问题之前,我已经有一个我不想使用的计划: 使用普通的数据连接字符串,可以随意填写参数,读取参数并将其替换为已解密并存储在其他位置的实际字符串。
答案 2 :(得分:0)
我遇到了同样的问题,发现.Net Framework 4.5需要DbContext类上的其他属性才能如下使用MySql
# print(df)
uer_id item_list prob_list
0 U1 [I1, I3, I4] [0.1, 0.4]
1 U2 [I5, I4] [0.4]