我试图将现有连接传递给DbContext,但是我收到此错误:
无法确定连接类型的提供程序名称 Oracle.DataAccess.Client.OracleConnection
我在这里做错了什么?
var oracleConnectionString = ConfigurationManager.ConnectionStrings["OracleConnectionString"].ConnectionString;
var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = IsolationLevel.ReadCommitted;
using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions))
{
using (var conn = new OracleConnection(oracleConnectionString))
{
conn.Open();
using (var context = new MainDbContext(conn, false))
{
var cmd = @" some sql commandd here ...";
context.Database.ExecuteSqlCommand(cmd);
context.SaveChanges();
}
}
scope.Complete();
}
连接字符串:
<add name="OracleConnectionString" connectionString="Data Source=SERVER;Persist Security Info=True;User ID=USER;Password=PASS" />
答案 0 :(得分:1)
如果您的edmx
文件位于不同的类项目中,要说出您的Web项目,您还需要在Web项目中使用相同的连接字符串。
所以...
班级项目:
网络项目
另外,如果您遗漏了某些Oracle,请查看Problems switching .NET project from unmanaged to managed ODP.NET assemblies 组件。
答案 1 :(得分:1)
如果使用Database First,看起来您无法从Oracle连接字符串创建新的DbContext,因为EF不知道在哪里查找元数据。您需要使用EF连接,而不是Oracle连接。这就是为我解决的问题:
var efConnectionString = ConfigurationManager.ConnectionStrings["MainDbContext"].ConnectionString;
using (var conn = new EntityConnection(efConnectionString))
{
conn.Open();
using (var context = new MainDbContext(conn, false))
{
}
}