无法确定类型' Oracle.DataAccess.Client.OracleConnection'的连接的提供者名称。

时间:2014-06-13 08:44:49

标签: c# .net oracle entity-framework

我试图将现有连接传递给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" />

2 个答案:

答案 0 :(得分:1)

如果您的edmx文件位于不同的类项目中,要说出您的Web项目,您还需要在Web项目中使用相同的连接字符串。

所以...

班级项目

  • edmx file
  • App.Config(edmx文件的连接字符串)

网络项目

  • Web.Config(与上面相同的连接字符串。)

另外,如果您遗漏了某些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))
    {
    }
}
相关问题