1

Gaaaa. Oracle and DotNet Framework code.

I am trying to factory-create a "ODP.NET, Managed Driver"

I am getting

Unable to find the requested .Net Framework Data Provider. It may not be installed.

And I have went to the below extreme to make sure it is "in there".

The "raw" vs using the factory debugging tip came from here : ODP.NET Managed - Unable to find requested .Net Framework Data Provider

Program.cs and "Main"

    private static void MyIssue()
    {
            string oracleConnectionString = GetConnectionStringByName("MyConnectionString");
            using (var conn = new Oracle.ManagedDataAccess.Client.OracleConnection(oracleConnectionString))
            {
                /* lets "prove" the connection string works in a raw fashion */
                conn.Open();
                conn.Close();

                /* THIS (above 2 lines) WORKS */

                System.Reflection.Assembly rawConnectionAssembly = conn.GetType().Assembly;
                ShowAssemblyInfo(rawConnectionAssembly, 1, "rawConnectionAssembly");
            }

            ShowAssemblyInfo(AppDomain.CurrentDomain.GetAssemblies().ToList(), 1, "AppDomain.CurrentDomain.GetAssemblies");




            /* this is debugging for the DbProviderFactories */
            System.Data.DataTable dbfacs = System.Data.Common.DbProviderFactories.GetFactoryClasses();
            System.Data.DataSet ds1 = new DataSet();
            ds1.Tables.Add(dbfacs);
            string xml = ds1.GetXml();

            try
            {
                string magicFactoryName = "ODP.NET, Managed Driver";
                if (!xml.Contains(magicFactoryName))
                {
                    throw new ArithmeticException(string.Format("Missing Factory Name in GetFactoryClasses. {0}", magicFactoryName));
                }

                /* really weird, I see the item in the xml (line above), but it won't created this Factory by that name */ /* THIS FAILS */
                var factory = System.Data.Common.DbProviderFactories.GetFactory(magicFactoryName);
                if (null != factory)
                {
                    var conn2 = factory.CreateConnection();
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine("Intentional SWALLOW : " + GenerateFullFlatMessage(ex));
            }
    }


    private static void ShowAssemblyInfo(ICollection<Assembly> asblies, int nestLevel, string prefixMsg)
    {
        if (null != asblies)
        {
            int counter = 0;
            foreach (Assembly currentAssembly in asblies)
            {
                ShowAssemblyInfo(currentAssembly, nestLevel, "." + Convert.ToString(++counter) + " " + prefixMsg);
            }
        }
    }

    private static void ShowAssemblyInfo(Assembly asbly, int nestLevel, string prefixMsg)
    {
        string prefix = new String(' ', nestLevel);

        if (null != asbly)
        {
            Console.WriteLine("{0}{1} {2} :: {3}", prefix , nestLevel, prefixMsg, asbly.FullName);

            foreach (System.Reflection.AssemblyName assemblyName in asbly.GetReferencedAssemblies())
            {
                System.Reflection.Assembly currentLoopAssembly = System.Reflection.Assembly.Load(assemblyName);
                foreach (System.Reflection.AssemblyName subAssembly in currentLoopAssembly.GetReferencedAssemblies())
                {
                    Console.WriteLine("subAssembly.FullName : {0}", subAssembly.FullName);
                }

                // overflow?
                //ShowAssemblyInfo(currentLoopAssembly, nestLevel++);
            }
        }
    }

    private static string GenerateFullFlatMessage(Exception ex)
    {
        return GenerateFullFlatMessage(ex, false);
    }

    private static string GenerateFullFlatMessage(Exception ex, bool showStackTrace)
    {
        string returnValue;

        StringBuilder sb = new StringBuilder();
        Exception nestedEx = ex;

        while (nestedEx != null)
        {
            if (!string.IsNullOrEmpty(nestedEx.Message))
            {
                sb.Append(nestedEx.Message + System.Environment.NewLine);
            }

            if (showStackTrace && !string.IsNullOrEmpty(nestedEx.StackTrace))
            {
                sb.Append(nestedEx.StackTrace + System.Environment.NewLine);
            }

            if (ex is AggregateException)
            {
                AggregateException ae = ex as AggregateException;

                foreach (Exception flatEx in ae.Flatten().InnerExceptions)
                {
                    if (!string.IsNullOrEmpty(flatEx.Message))
                    {
                        sb.Append(flatEx.Message + System.Environment.NewLine);
                    }

                    if (showStackTrace && !string.IsNullOrEmpty(flatEx.StackTrace))
                    {
                        sb.Append(flatEx.StackTrace + System.Environment.NewLine);
                    }
                }
            }

            nestedEx = nestedEx.InnerException;
        }

        returnValue = sb.ToString();

        return returnValue;
    }

Note, I am not getting a "ArithmeticException" (faux) exception...so I know its not f@t-finger syntax error mistake.

enter image description here

App.config

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<configuration>
  <configSections>
  </configSections>

  <appSettings>

  </appSettings>

  <connectionStrings>

    <add name="MyConnectionString"
        connectionString="Data Source=localhost:1521/XE;Persist Security Info=True;User ID=MyOracleSchemaOne;Password=mypassword;"
        providerName="Oracle.ManagedDataAccess.Client"/>


  </connectionStrings>
  <system.data>
    <DbProviderFactories>
      <remove invariant="Oracle.ManagedDataAccess.Client"/>

      <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver" type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342" />

    </DbProviderFactories>
  </system.data>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <publisherPolicy apply="no" />
        <assemblyIdentity name="Oracle.ManagedDataAccess" publicKeyToken="89b483f429c47342" culture="neutral" />
        <bindingRedirect oldVersion="4.121.0.0 - 4.65535.65535.65535" newVersion="4.122.19.1" />
      </dependentAssembly>


    </assemblyBinding>
  </runtime>
  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="SampleDataSource"
            descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) "/>
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
</configuration>

packages.config

The error

Unable to find the requested .Net Framework Data Provider. It may not be installed.

However, it is "in" the DataTable/DataSet/Xml

xml = (note, the last entry, and germane one is there)

<NewDataSet>
  <DbProviderFactories>
    <Name>Odbc Data Provider</Name>
    <Description>.Net Framework Data Provider for Odbc</Description>
    <InvariantName>System.Data.Odbc</InvariantName>
    <AssemblyQualifiedName>System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>OleDb Data Provider</Name>
    <Description>.Net Framework Data Provider for OleDb</Description>
    <InvariantName>System.Data.OleDb</InvariantName>
    <AssemblyQualifiedName>System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>OracleClient Data Provider</Name>
    <Description>.Net Framework Data Provider for Oracle</Description>
    <InvariantName>System.Data.OracleClient</InvariantName>
    <AssemblyQualifiedName>System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>SqlClient Data Provider</Name>
    <Description>.Net Framework Data Provider for SqlServer</Description>
    <InvariantName>System.Data.SqlClient</InvariantName>
    <AssemblyQualifiedName>System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>MySQL Data Provider</Name>
    <Description>.Net Framework Data Provider for MySQL</Description>
    <InvariantName>MySql.Data.MySqlClient</InvariantName>
    <AssemblyQualifiedName>MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.19.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>ODP.NET, Managed Driver</Name>
    <Description>Oracle Data Provider for .NET, Managed Driver</Description>
    <InvariantName>Oracle.ManagedDataAccess.Client</InvariantName>
    <AssemblyQualifiedName>Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342</AssemblyQualifiedName>
  </DbProviderFactories>
</NewDataSet>

Note, I've also tried a:

    <DbProviderFactories>
          <!----          <remove invariant="Oracle.ManagedDataAccess.Client"/>  -->
      </clear>

Note, one weird thing I saw was that with "/clear"....I still get this as the xml

<NewDataSet>
  <DbProviderFactories>
    <Name>Odbc Data Provider</Name>
    <Description>.Net Framework Data Provider for Odbc</Description>
    <InvariantName>System.Data.Odbc</InvariantName>
    <AssemblyQualifiedName>System.Data.Odbc.OdbcFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>OleDb Data Provider</Name>
    <Description>.Net Framework Data Provider for OleDb</Description>
    <InvariantName>System.Data.OleDb</InvariantName>
    <AssemblyQualifiedName>System.Data.OleDb.OleDbFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>OracleClient Data Provider</Name>
    <Description>.Net Framework Data Provider for Oracle</Description>
    <InvariantName>System.Data.OracleClient</InvariantName>
    <AssemblyQualifiedName>System.Data.OracleClient.OracleClientFactory, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>SqlClient Data Provider</Name>
    <Description>.Net Framework Data Provider for SqlServer</Description>
    <InvariantName>System.Data.SqlClient</InvariantName>
    <AssemblyQualifiedName>System.Data.SqlClient.SqlClientFactory, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</AssemblyQualifiedName>
  </DbProviderFactories>
  <DbProviderFactories>
    <Name>ODP.NET, Managed Driver</Name>
    <Description>Oracle Data Provider for .NET, Managed Driver</Description>
    <InvariantName>Oracle.ManagedDataAccess.Client</InvariantName>
    <AssemblyQualifiedName>Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342</AssemblyQualifiedName>
  </DbProviderFactories>
</NewDataSet>

UPDATES:

I ran VS2019 "As Administrator", but same error.

My machine.config (C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config )

(nothing oracle in there)

  <system.data>
    <DbProviderFactories>
      <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=8.0.19.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>
    </DbProviderFactories>
  </system.data>

The output in regards to fishing the "conn".

Raw Parent Assembly : Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342


subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Security, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Runtime.Remoting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

UPDATE (2)

(new cs code above...here are the 2 entries of interest)::

1 rawConnectionAssembly ::                    Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342

1 .9 AppDomain.CurrentDomain.GetAssemblies :: Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342 

the entire output:

1 rawConnectionAssembly ::                    Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342
1 .9 AppDomain.CurrentDomain.GetAssemblies :: Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342 
 
 1 rawConnectionAssembly :: Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342
subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3asubAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

 1 .1 AppDomain.CurrentDomain.GetAssemblies :: mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089


 1 .2 AppDomain.CurrentDomain.GetAssemblies :: MyCompany.ConsoleOne, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullsubAssembly.FullName : System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3asubAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3asubAssembly.FullName : NServiceBus.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c
subAssembly.FullName : RabbitMQ.Client, Version=6.0.0.0, Culture=neutral, PublicKeyToken=89e7d7c5feba84cesubAssembly.FullName : System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.DirectoryServices.Protocols, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

subAssembly.FullName : MyCompany.MyProj1.NHibernateEntities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullsubAssembly.FullName : NHibernate, Version=5.1.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : Remotion.Linq, Version=2.2.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b
subAssembly.FullName : Remotion.Linq.EagerFetching, Version=2.2.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b


subAssembly.FullName : System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : NServiceBus.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c
subAssembly.FullName : NHibernate, Version=5.2.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a

 1 .3 AppDomain.CurrentDomain.GetAssemblies :: NServiceBus.Core, Version=7.0.0.0, Culture=neutral, PublicKeyToken=9fc386479f8a226c
subAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
subAssembly.FullName : SMDiagnostics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 1 .4 AppDomain.CurrentDomain.GetAssemblies :: System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 1 .5 AppDomain.CurrentDomain.GetAssemblies :: CrowdStrike.Sensor.ScriptControl, Version=5.32.11406.0, Culture=neutral, PublicKeyToken=null
 1 .6 
 1 .7 AppDomain.CurrentDomain.GetAssemblies :: System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3asubAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 1 .8 AppDomain.CurrentDomain.GetAssemblies :: System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 1 .9 AppDomain.CurrentDomain.GetAssemblies :: Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342
subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Runtime.Caching, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3asubAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

 1 .10 AppDomain.CurrentDomain.GetAssemblies :: System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

 1 .11 AppDomain.CurrentDomain.GetAssemblies :: System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
subAssembly.FullName : System.Data.SqlXml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
 1 .12 AppDomain.CurrentDomain.GetAssemblies :: MyCompany.MyProj1.NHibernateMappings, Version=1.0.0.0, Culture=neutral, PublicKeyToken=nullsubAssembly.FullName : NHibernate, Version=5.1.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : Remotion.Linq, Version=2.2.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b
subAssembly.FullName : Remotion.Linq.EagerFetching, Version=2.2.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b


subAssembly.FullName : System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

 1 .13 AppDomain.CurrentDomain.GetAssemblies :: NHibernate, Version=5.2.0.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4

subAssembly.FullName : SMDiagnostics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089subAssembly.FullName : System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
subAssembly.FullName : Remotion.Linq, Version=2.2.0.0, Culture=neutral, PublicKeyToken=fee00910d6e5f53b
subAssembly.FullName : System.Xaml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

(my question is not too big, I couldn't update with everything :( )

granadaCoder
  • 26,328
  • 10
  • 113
  • 146
  • 1
    interesting. reflect/disassemble the actual ODP assemblies that are on your machine and see if the assembly version matches 4.122.19.1. Look into GAC also. In fact , I believe ODP looks up in GAC first. What you call "raw" is not dependent on assembly version. It just grabs first available and as long as API matches. But using factories depends on this stuff. – T.S. Aug 06 '20 at 20:17
  • Thanks for the tip. That led me to update the question. But the "raw" AssemblyFullName = (drum roll) "Raw Parent Assembly : Oracle.ManagedDataAccess, Version=4.122.19.1, Culture=neutral, PublicKeyToken=89b483f429c47342" Gaaaaaaaaaaaaaaaaaaaa – granadaCoder Aug 06 '20 at 21:09
  • one thing you can do is to get loaded assemblies from `appdomain` you have `bindingRedirect` . what if you remove it? – T.S. Aug 07 '20 at 03:54
  • I'm not all that familiar with the factory methods (database agnosticism is kinda like not caring if you arrive by motorcyle or car to me - yeah they both work but man are they different :P). Joking aside, I think i'm going to recommend installing the managed driver via the oracle universal installer - doing so is going to register the necessary changes in the global machine and web.configs, at least giving you a point of reference to get this working. You can then take that and see if you can apply it to an xcopy install of just the one or two managed dlls. – b_levitt Aug 07 '20 at 21:32
  • haha that's the exact thing I'm trying to not do! (voodoo that happens during installers). I might try this with docker image or something (not my machine) to debug further. but thanks for the tip (b_lev). – granadaCoder Aug 11 '20 at 12:47
  • no i totally get that and I agree with what you're doing. But what I'm trying to do is get you to a point of reference...make it work on a machine where you use the universal installer. And then use the same working code on an xcopy only system and fill in the pieces until it works. I think the problem here is the documentation just isn't good enough, so you have to rely on documentation by example. – b_levitt Aug 14 '20 at 13:26
  • At the end of the day, this is just a .net library with a .net config, and there's only so many things that can be wrong and I'm thinking they revolve around what the universal installers put into the machine.config on the system and that if you just copy that into your app/web.config in your project you're going to get it to work. – b_levitt Aug 14 '20 at 13:28

1 Answers1

0

when use code follow ,will dispaly all provider that you have

   static DataTable GetProviderFactoryClasses()
    {
        // Retrieve the installed providers and factories.
        DataTable table = DbProviderFactories.GetFactoryClasses();

        // Display each row and column value.
        foreach (DataRow row in table.Rows)
        {
            foreach (DataColumn column in table.Columns)
            {
                Console.Write(row[column]);
                Console.Write("\t");
            }
            Console.WriteLine(";");
        }

        return table;
    }

The error is exactly the provider name is "Oracle.ManagedDataAccess.Client" but "ODP.NET, Managed Driver";My error is the DbContext’s construction connectionstr is wrong,it should like "ConfigurationManager.ConnectionStrings["OperateLogOracle"].ConnectionString ?? "name=OperateLogOracle""

Henry
  • 31
  • 4