-
Notifications
You must be signed in to change notification settings - Fork 226
Oracle
The generator is a T4 template that runs externally to your project and therefore cannot make use of any NuGet packages you have installed into your project. It can however use ones that are installed in the GAC. Therefore the Oracle Oracle.ManagedDataAccess.dll
file needs to be installed into the GAC to make it accessible to the generator.
To install Oracle.ManagedDataAccess.dll
into the global assembly cache (GAC). Run the following command (please note your version number may differ from the 21.7.0 used below):
cd C:\Users\[user]\.nuget\packages\oracle.manageddataaccess\21.7.0\lib\net462
gacutil.exe /i Oracle.ManagedDataAccess.dll
Notice I am using the .NET 4.6.2
version because the generator runs as a T4 template using .NET, and not a .NET Core template. It does not matter if you are generating code for .NET or .NET Core, the generator is run outside of your project as a .NET program.
Looking at which version I have installed with gacutil /l Oracle.ManagedDataAccess
shows the following:
Microsoft (R) .NET Global Assembly Cache Utility. Version 4.0.30319.0
Copyright (c) Microsoft Corporation. All rights reserved.
The Global Assembly Cache contains the following assemblies:
Oracle.ManagedDataAccess, Version=4.122.21.1, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=MSIL
Number of items = 1
Which means I have v4.122.21.1 installed.
In both
c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config
c:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
at approximately line 168 I have the following <system.data>
XML where you will see the ODP.NET, Managed Driver has been added
<system.data>
<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
<add name="Npgsql Data Provider" invariant="Npgsql" description=".NET Data Provider for PostgreSQL" type="Npgsql.NpgsqlFactory, Npgsql, Version=4.1.8.0, Culture=neutral, PublicKeyToken=5D8B90D52F46FDA7" />
<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.29.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
<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>
I modified both. However to find the exact one which is used by the generator, in your <database>.tt
file very near the bottom, un-comment
fileManagement.WriteLine("// " + System.Runtime.InteropServices.RuntimeEnvironment.SystemConfigurationFile);
Save the <database>.tt
and inspect the first line in the generated output. I have the following listed:
// C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config
So that is the exact file the generator will use, and is the one that is required to have the above ODP.NET, Managed Driver
XML added.