在我的解决方案中,我希望能够同时使用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"));
}
}