实体框架6-Oracle和SQL Server-提供的SqlConnection没有指定初始目录或AttachDBFileName

时间:2019-07-14 08:48:42

标签: c# entity-framework entity-framework-6

在我的解决方案中,我希望能够同时使用SQL Server和Oracle数据库。我用.net core做过类似的事情,它可以工作。由于某些新要求,必须使用.net框架来完成,因此我切换到EF6。 大多数代码是相同的,只是更改了一些与EF6相关的内容。

我收到错误

  

提供的SqlConnection没有指定初始目录或AttachDBFileName

当我尝试在同一类/项目中创建Oracle DbContext和SQL Server DbContext的实例时。我试图将配置和DbContext类分离到SQL Server和Oracle的不同项目,但这没有帮助。

如果我仅使用DbContext之一,则一切正常。我可以在Oracle和SQL Server DB上执行CRUD操作。问题是,当我尝试一次又一次“更新”它们时,就像我对.net core所做的一样(再次起作用)。

任何帮助将不胜感激。

这是相关代码的摘要:

//if only one of these line is present, then everything works.
var contextSqlServer = new SqlServerDbContext(connString_SqlServer);
var contextOracle  = new OracleDbContext(connstring_Oracle); 


//------

_context.Set<T>().AddRange(t); // Gets error here, if defined two different DbContext above

//----------

[DbConfigurationType(typeof(OracleConfiguration))]
public class OracleDbContext : DbContext 
{ ... }
//---------------
public class OracleConfiguration : DbConfiguration
{
    public OracleConfiguration()
    {
        var providerName = "Oracle.ManagedDataAccess.Client";

        SetProviderServices(providerName, EFOracleProviderServices.Instance);
        SetProviderFactory(providerName, new OracleClientFactory());
        SetDefaultConnectionFactory(new OracleConnectionFactory());
    }
}

//----------
[DbConfigurationType(typeof(MySqlServerConfiguration))]
public class SqlServerDbContext : DbContext
{ ... }
//----------
public class MySqlServerConfiguration : DbConfiguration
{
    public MySqlServerConfiguration()
    {
        SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
        SetProviderServices("System.Data.SqlClient", SqlProviderServices.Instance);
        SetDefaultConnectionFactory(new LocalDbConnectionFactory("mssqllocaldb"));
    }
}

0 个答案:

没有答案