Oracle Data Provider for .NET
Release Notes
Release 12.1.0.2.0 for ODAC 12c Release 3
December 2014
Copyright (c) Oracle Corporation 2014
This document provides information that supplements the Oracle Data Provider for .NET
(ODP.NET) documentation.
TABLE OF CONTENTS
Documentation Corrections and Additions
This section contains information that corrects or adds to existing ODP.NET documentation.
Custom Entity Data Model (EDM) Type Mapping Not Applied to Generated Complex Types
When using the EDM wizard to create a complex type from a function import, any custom EDM type mappings
specified will not be applied. The EDM wizard uses the default type mappings and the only known workaround
is to manually edit the resulting complex type. After the complex type is generated any type declaration
(field, property, constructor parameter, etc.) in the complex object which has an undesired type (such as
Decimal rather than Boolean) should be manually edited to be of the desired type.
ODP.NET Configuration Files: Unified Managed and Unmanaged ODP.NET Format
ODP.NET, Unmanaged Driver now has the option of using the same configuration file
format as ODP.NET, Managed Driver. The format simplifies configuration by using a
single unified scheme. To utilize this format, the existing unmanaged ODP.NET
configuration section should be renamed from <oracle.dataaccess.client> to
<oracle.unmanageddataaccess.client>. The existing unmanaged ODP.NET elements and
values are supported within the new section using the same format as with ODP.NET,
Managed Driver. For example, converting the FetchSize element and value from the
traditional to the new format would be done as follows:
<oracle.dataaccess.client>
<settings>
<add name="FetchSize" value="131072" />
</settings>
</oracle.dataaccess.client>
<oracle.unmanageddataaccess.client>
<version number="*">
<settings>
setting name="FetchSize" value="131072" />
</settings>
</version>
</oracle.unmanageddataaccess.client>
Specifying UDT Mappings with Unified Configuration for Unmanaged ODP.NET
To support custom UDT mappings in the unified configuration format, a new section
within the <version> section is used. This new section is identified as <udtmappings>
and each mapping is identified using a <udtmapping> element. The
following attributes may be specified for each udtMapping element:
- typeName (required)
- factoryName (required)
- dataSource (optional)
- schemaName (optional)
These elements retain the same name and meaning as when used with the traditional
configuration format. For additional information refer to the Oracle User-Defined
Types (UDTs) and .NET Custom Types chapter in the Oracle Data Provider for .NET
Developer's Guide.
Example of converting traditional format to unified format:
<configuration>
<oracle.dataaccess.client>
<settings>
<add name="Person" value="udtMapping factoryName='PersonFactory, Sample,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' typeName='PERSON'
schemaName='SCOTT' dataSource='oracle'" />
</settings>
</oracle.dataaccess.client>
</configuration>
<configuration>
<oracle.unmanageddataaccess.client>
<udtmappings>
<udtmapping typename="PERSON" factoryname="PersonFactory, Sample,
Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"
schemaname="SCOTT" datasource="oracle" />
</udtmappings>
</oracle.unmanageddataaccess.client>
</configuration>
Note: UDT mapping does not apply to the ODP.NET, Managed Driver.
ODP.NET, Managed Driver Support for Oracle Database 12c Implicit Ref Cursor
ODP.NET, Managed Driver introduces support for the new Oracle Database 12c Implicit
Ref Cursor. Configuration occurs using the <implicitrefcursor>
.NET configuration section. When using database implicit ref cursors, the bindInfo element should be
specified with a mode of "Implicit":
<bindinfo mode="Implicit" />
For additional information refer to the implicitRefCursor section in Chapter 2 of the Oracle Data Provider for .NET Developer's Guide.
Entity Framework Code First: Code-Based Migrations With No Supporting Code Migration File
When using code-based migrations with the Entity Framework provider, the migration
history table may be dropped if no supporting code migration file existed prior to
updating the database.
Workaround: Ensure the supporting code migration file has been added prior to updating the database.
The following steps can remove the migration history table:
- Execute application to create database objects
- Enable-Migrations
- Make code change to POCO
- Update-Database
The workaround is to ensure code file is created:
- Execute application to create database objects
- Enable-Migrations
- Make code change to POCO
- Add-Migration (This step will create the necessary code migration file).
- Update-Database
Session Time Zone Hour Offset in ODP.NET Managed and Unmanaged Drivers
ODP.NET managed and unmanaged drivers set the default session time zone differently. While the session
time zone for unmanaged ODP.NET uses an hour offset, managed ODP.NET uses the region identifier for setting
its session time zone. As a result, managed ODP.NET is sensitive to daylight savings in scenarios where the
timestamp LTZ values have to be converted from/to the session time zone.
There are two methods to resolve this difference if needed.
For ODP.NET, Unmanaged Driver, the application explicitly sets the region identifier with the environment
variable 'ORA_SDTZ' (e.g. 'set ORA_SDTZ = <Region ID>'). If ORA_SDTZ variable is set, Oracle Client
considers this value as the session time zone. The second method is to execute an alter session command to
set the session time zone property to the region identifier.
ODP.NET, Managed Driver with NTS Authentication
ODP.NET, Managed Driver supports NTS authentication to the database, except when the Windows domain is constrained to only support Kerberos-based domain authentication.
ODP.NET, Managed Driver SSL Connections with Firewalls
ODP.NET, Managed Driver SSL connections require a redirect to a dynamic
port on the database server side. If a firewall exists between the
database client and server, then all firewall ports must be enabled or
the dynamic firewall port Oracle chooses must be enabled at run-time.