如何创建指定数据库类型的DbContext实例

时间:2018-12-29 18:00:56

标签: c# entity-framework

我知道这里的默认返回值是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);
    }
}

3 个答案:

答案 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]