An OracleRef instance represents an Oracle REF, which references a persistent, standalone, referenceable object that resides in the database. The OracleRef object provides methods to insert, update, and delete the Oracle REF.
System.Object
System.MarshalByRefObject
Oracle.DataAccess.Types.OracleRef
// C# public sealed class OracleRef : MarshalByRefObject,ICloneable, IDisposable, INullable
All public static methods are thread-safe, although instance methods do not guarantee thread safety.
If two or more OracleRef objects that refer to the same Oracle object in the database are retrieved through the same OracleConnection, then their operations on the referenced object must be synchronized.
Namespace: Oracle.DataAccess.Types
Assembly: Oracle.DataAccess.dll
ODP.NET Version: ODP.NET for .NET Framework 2.0 or ODP.NET for .NET Framework 4
See Also:
OracleRef members are listed in the following tables.
OracleRef constructors are listed in Table 16-30.
Table 16-30 OracleRef Constructors
| Constructor | Description |
|---|---|
|
Instantiates a new instance of |
OracleRef static methods are listed in Table 16-31
Table 16-31 OracleRef Static Fields
| Static Field | Description |
|---|---|
|
Represents a null value that can be assigned to an |
OracleRef static methods are listed in Table 16-32.
Table 16-32 OracleRef Static Methods
| Method | Description |
|---|---|
|
|
Inherited from |
OracleRef instance properties are listed in Table 16-33.
Table 16-33 OracleRef Instance Properties
| Property | Description |
|---|---|
|
References the connection used by the |
|
|
References the connection used by the |
|
|
Indicates whether or not the |
|
|
Indicates whether or not the Oracle |
|
|
Returns the fully qualified object table name that is associated with the |
|
|
Returns a .NET representation of this Oracle |
OracleRef instance methods are listed in Table 16-34.
Table 16-34 OracleRef Instance Methods
| Method | Description |
|---|---|
|
Clones the |
|
|
Deletes the referenced object from the database |
|
|
Releases resources allocated for the |
|
|
|
Inherited from |
|
Flushes changes made on the |
|
|
Returns the object that the specified REF references as a custom type (Overloaded) |
|
|
Returns the object that the specified REF references as a custom type (Overloaded) |
|
|
|
Inherited from |
|
|
Inherited from |
|
Compares two |
|
|
Locks the |
|
|
|
Inherited from |
|
Updates the object referenced by the specified |
OracleRef constructors instantiate new instances of OracleRef class.
OracleRef(OracleConnection, string)
This constructor creates an instance of the OracleRef class with a connection and a HEX string that represents an REF instance in the database.
OracleRef(OracleConnection, string, string)
This constructor creates an instance of the OracleRef class using the specified OracleConnection object, user-defined type name, and an object table name
This constructor creates an instance of the OracleRef class with a connection and a HEX string that represents an REF instance in the database.
// C# public OracleRef(OracleConnection con, string hexStr);
con
An OracleConnection instance.
hexStr
A HEX string that represents an REF instance in the database.
ArgumentException - The HEX string does not represent a valid REF in the database.
ArgumentNullException - The connection or HEX string is null.
InvalidOperationException - The OracleConnection object is not open.
When an OracleRef instance is created, it is referenced to a specific table in the database.
The connection must be opened explicitly by the application. OracleRef does not open the connection implicitly.
This constructor creates an instance of the OracleRef class using the specified OracleConnection object, user-defined type name, and an object table name.
// C# public OracleRef(OracleConnection con, string udtTypeName, string objTabName);
con
An OracleConnection instance.
udtTypeName
A user-defined type name.
objTabName
An object table name.
ArgumentException - The object type name or the object table name is not valid.
ArgumentNullException - The object type name or the table name is null.
InvalidOperationException - The OracleConnection object is not open.
When an OracleRef instance is created, this OracleRef instance is associated with the specific table in the database. In other words, it represents a persistent REF.
This constructor creates a reference to the object table. However, it does not cause any entries to be made in database tables until the object is flushed to the database, that is, until the OracleRef.Flush or the OracleConnection.FlushCache method is called on the OracleRef Connection. Therefore, any operation that attempts to operate on the database copy of the object before flushing the object, such as, lock the object or fetch the latest copy of the object from the database, results in an OracleException.
The connection must be opened explicitly by the application. OracleRef does not open the connection implicitly.
OracleRef static fields are listed in Table 16-35.
Table 16-35 OracleRef Static Fields
| Static Field | Description |
|---|---|
|
Represents a null value that can be assigned to an |
OracleRef static methods are listed in Table 16-36.
OracleRef instance properties are listed in Table 16-37.
Table 16-37 OracleRef Instance Properties
| Property | Description |
|---|---|
|
References the connection used by the |
|
|
References the connection used by the |
|
|
Indicates whether or not the |
|
|
Indicates whether or not the Oracle |
|
|
Returns the fully qualified object table name that is associated with the |
|
|
Returns a .NET representation of this Oracle |
This instance property references the connection used by the OracleRef.
// C#
public OracleConnection Connection{get;}
An OracleConnection object associated with the REF.
ObjectDisposedException - The object is already disposed.
Once the Dispose method is invoked, this property is set to null.
This instance property indicates whether or not the object referenced by the Oracle REF in the object cache has any changes that can be flushed to the database.
// C#
public bool HasChanges {get;}
Returns true if the object referenced by the Oracle REF in the object cache has any changes that can be flushed to the database; otherwise, returns false.
ObjectDisposedException - The object is already disposed.
This property returns true if a copy of the referenced object in the object cache is updated or deleted.
If there is no copy of the referenced object in the object cache, the latest copy of the referenced object in the database is cached in the object cache and false is returned.
This instance property indicates whether or not the REF is locked.
// C#
public bool IsLocked {get;}
Returns true if the REF is locked; otherwise returns false.
ObjectDisposedException - The object is already disposed.
This instance property indicates whether or not the Oracle REF is NULL.
// C#
public bool IsNull {get;}
Returns true if the REF is NULL; otherwise, returns false.
ObjectDisposedException - The object is already disposed.
If the Oracle REF is NULL, this property returns true. Otherwise, it returns false.
This instance property returns the fully-qualified object table name that is associated with the REF.
// C#
public string ObjectTableName{get;}
A fully-qualified object table name that is associated with the REF.
ObjectDisposedException - The object is already disposed.
The object table name is in the form schema_Name.Table_Name.
This instance property returns a .NET representation of this Oracle REF.
// C#
public string Value{get;}
A .NET representation of the Oracle REF.
ObjectDisposedException - The object is already disposed.
This property returns a HEX string that represents the REF.
The returned string can be used to create a new OracleRef instance by using the OracleRef(OracleConnection, string) constructor.
OracleRef instance methods are listed in Table 16-38.
Table 16-38 OracleRef Instance Methods
| Method | Description |
|---|---|
|
Clones the |
|
|
Deletes the referenced object from the database |
|
|
Releases resources allocated for the |
|
|
|
Inherited from |
|
Flushes changes made on the |
|
|
Returns the object that the specified REF references as a custom type (Overloaded) |
|
|
Returns the object that the specified REF references as a custom type (Overloaded) |
|
|
|
Inherited from |
|
|
Inherited from |
|
Compares two |
|
|
Locks the |
|
|
|
Inherited from |
|
Updates the object referenced by the specified |
This instance method clones the REF.
// C# public OracleRef Clone();
A clone of the current instance.
ICloneable
InvalidOperationException - The associated connection is not open.
This method deletes the referenced object from the database.
// C#
public void Delete(bool bFlush);
bFlush
A bool that specifies whether or not the REF is flushed immediately.
This method marks the specified REF for deletion.
Depending on whether the value of bFlush is set to true or false, the following occurs:
True
The object referenced by the specified REF is deleted immediately from the database.
Before flushing objects, it is required that the application has explicitly started a transaction by executing the BeginTransaction method on the OracleConnection object. This is because if the object being flushed has not already been locked by the application, an exclusive lock is obtained implicitly for the object. The lock is only released when the transaction commits or rollbacks.
False
The object referenced by the REF is not deleted immediately from the database, but only when a subsequent Flush method is invoked for the specified REF or the FlushCache method is invoked on the OracleRef or the FlushCache method is invoked on the OracleRef connection.
See Also:
OracleConnection "FlushCache"
This instance method releases resources allocated for the OracleRef instance.
// C# public void Dispose();
IDisposable
The object cannot be reused after it is disposed. Although some properties can still be accessed, their values may not be up-to-date.
This instance method flushes changes made on the REF object to the database, such as updates or deletes.
// C# public void Flush();
InvalidOperationException - The associated connection is not open.
Before flushing objects, it is required that the application has explicitly started a transaction by executing the BeginTransaction method on the OracleConnection object. This is because if the object being flushed has not already been locked by the application, an exclusive lock is obtained implicitly for the object. The lock is only released when the transaction commits or rollbacks.
GetCustomObject methods return the object that the specified REF references as a custom type.
GetCustomObject(OracleUdtFetchOption)
This method returns the object that the specified REF references as a custom type using the specified fetch option.
GetCustomObject(OracleUdtFetchOption, int)
This method returns the object that the specified REF references as a custom type using the specified fetch option and depth level.
This method returns the object that the specified REF references, as a custom type, using the specified fetch option.
// C#
public object GetCustomObject(OracleUdtFetchOption fetchOption);
fetchOption
An OracleUdtFetchOption value.
A custom object that represents the object that the specified REF references.
InvalidOperationException - The specified connection is not open, or a valid custom type has not been registered for the type of the referenced object.
This method returns a custom type determined by the UDT mappings on the specified connection.
The connection must be opened explicitly by the application. This method does not open the connection implicitly.
The application can use the OracleUdtFetchOption method to control the copy of the Object that is returned according to the specified option:
OracleUdtFetchOption.Cache option
If this option is specified, and there is a copy of the referenced object in the object cache, it is returned immediately. If no cached copy exists, the latest copy of the referenced object in the database is cached in the object cache and returned.
OracleUdtFetchOption.Server option
If this option is specified, the latest copy of the referenced object from the database is cached in the object cache and returned. If a copy of the referenced object already exists in the cache, the latest copy overwrites the existing one.
OracleUdtFetchOption.TransactionCache option
If this option is specified, and a copy of the referenced object is cached in the current transaction, the copy is returned. Otherwise, the latest copy of the referenced object from the database is cached in the object cache and returned. If a copy of the referenced object already exists in the cache, the latest copy overwrites the existing one.
Note that if a cached copy of the referenced object was modified before the current transaction began, that is, if the OracleRef.HasChanges property returns true, then the Recent option returns the cached copy of the referenced object. Outside of a transaction, the Recent option behaves like the Any option.
This method returns the object that the specified REF references, as a custom type, using the specified fetch option and depth level.
// C#
public object GetCustomObject(OracleUdtFetchOption fetchOption, int depthLevel);
fetchOption
An OracleUdtFetchOption value.
depthLevel
The number of levels to be fetched for nested REF attributes.
A custom object that represents the object that the specified REF references.
InvalidOperationException - The specified connection is not open, or a valid custom type has not been registered for the type of the referenced object.
This method returns a custom type determined by the UDT mappings on the specified connection.
If the object that the REF references contains nested REF attributes, the depthLevel can be specified to optimize the subsequent object retrieval. The value of depthLevel determines the number of levels that are optimized.
For example, if the depthLevel is specified as two, the optimization is applied to all top-level nested REF attributes in the object being fetched and also to all nested REF attributes within the objects referenced by the top-level nested REF attributes.
The connection must be opened explicitly by the application. This method does not open the connection implicitly.
The application can use the OracleUdtFetchOption method to control the copy of the Object that is returned according to the specified option:
OracleUdtFetchOption.Cache option
If this option is specified, and there is a copy of the referenced object in the object cache, it is returned immediately. If no cached copy exists, the latest copy of the referenced object in the database is cached in the object cache and returned.
OracleUdtFetchOption.Server option
If this option is specified, the latest copy of the referenced object from the database is cached in the object cache and returned. If a copy of the referenced object already exists in the cache, the latest copy overwrites the existing one.
OracleUdtFetchOption.TransactionCache option
If this option is specified, and a copy of the referenced object is cached in the current transaction, the copy is returned. Otherwise, the latest copy of the referenced object from the database is cached in the object cache and returned. If a copy of the referenced object already exists in the cache, the latest copy overwrites the existing one.
Note that if a cached copy of the referenced object was modified before the current transaction began, that is, if the OracleRef.HasChanges property returns true, then the Recent option returns the cached copy of the referenced object. Outside of a transaction, the Recent option behaves like the Any option.
GetCustomObjectForUpdate methods return the object that the specified REF references as a custom type.
GetCustomObjectForUpdate(bool)
This method locks the specified REF in the database and returns the object that the specified REF references as a custom type using the specified wait option.
GetCustomObjectForUpdate(bool, int)
This method locks the specified REF in the database and returns the object that the specified REF references as a custom type using the specified wait option and depth level.
This method locks the specified REF in the database and returns the object that the specified REF references, as a custom type, using the specified wait option.
// C#
public object GetCustomObjectForUpdate(bool bWait);
bWait
Specifies if the REF is to be locked with the no-wait option. If wait is set to true, this method invocation does not return until the REF is locked.
A custom object that represents the object that the specified REF references.
InvalidOperationException - The specified connection is not open, or a valid custom type has not been registered for type of the referenced object.
OracleException - bWait is set to false, and the lock cannot be acquired.
This method returns the latest copy of the referenced object, as a custom type, determined by the custom types registered on the OracleRef connection.
To be able to release the lock on the REF appropriately after flushing the REF using the Flush method on the OracleRef or FlushCache method on the OracleConnection, the application must commit or rollback the transaction. Therefore, it is required that, before invoking this method, a transaction is explicitly started by executing the BeginTransaction method on the OracleConnection object.
This method makes a network round-trip to lock the REF in the database. After this call, programmers can modify the associated row object exclusively. Then a call to the Flush method on the OracleRef or FlushCache method on the OracleConnection flushes the changes to the database.
If true is passed, this method blocks until the lock can be acquired. If false is passed, this method immediately returns. If the lock cannot be acquired, an OracleException is thrown.
The connection must be opened explicitly by the application. This method does not open the connection implicitly.
This method locks the specified REF in the database and returns the object that the specified REF references, as a custom type, using the specified wait option and depth level
public object GetCustomObjectForUpdate(bool bWait, int depthlevel);
bWait
A boolean value that specifies if the REF is to be locked with the no-wait option. If wait is set to true, this method invocation does not return until the REF is locked.
depthLevel
The number of levels to be fetched for nested REF attributes.
A custom object that represents the object that the specified REF references.
InvalidOperationException - The specified connection is not open, or a valid custom type has not been registered for type of the referenced object.
OracleException - bWait is set to false, and the lock cannot be acquired.
This method returns the latest copy of the referenced object, as a custom type, determined by the custom types registered on the OracleRef connection.
To be able to release the lock on the REF appropriately after flushing the REF using the Flush method on the OracleRef or FlushCache method on the OracleConnection, the application must commit or rollback the transaction. Therefore, it is required that, before invoking this method, a transaction is explicitly started by executing the BeginTransaction method on the OracleConnection object.
This method makes a network round-trip to lock the REF in the database. After this call, programmers can modify the associated row object exclusively. Then a call to the Flush method on the OracleRef or FlushCache method on the OracleConnection flushes the changes to the database.
If true is passed, this method blocks until the lock can be acquired. If false is passed, this method immediately returns. If the lock cannot be acquired, an OracleException is thrown.
If the object that the REF references contains nested REF attributes, the depthLevel can be specified to optimize the subsequent object retrieval. The value of depthLevel determines the number of levels that are optimized.
For example, if the depthLevel is specified as 2, the optimization is applied to all top-level nested REF attributes in the object being fetched and also to all nested REF attributes within the objects referenced by the top-level nested REF attributes.
The connection must be opened explicitly by the application. This method does not open the connection implicitly.
This instance method compares two OracleREF objects.
// C#
public bool IsEqual(OracleRef oraRef);
oraRef
The provided OracleRef object.
bool
This instance method returns true if the OracleRef instance and the OracleRef parameter both reference the same object. Otherwise, it returns false.
This instance method locks the REF in the database.
// C#
public bool Lock(bool bWait);
bWait
Specifies if the lock is set to the no-wait option. If bWait is set to true, the method invocation does not return until the REF is locked.
A boolean value that indicates whether or not the lock has been acquired.
InvalidOperationException - The associated connection is not open.
ObjectDisposedException - The object is already disposed.
In order for the application to release the lock on the REF appropriately after the Flush invocation on the OracleRef or FlushCache methods, the application must commit or rollback the transaction. Therefore, it is required that, before invoking a lock on an OracleRef object, a transaction is explicitly started by executing the BeginTransaction method on the OracleConnection object.
This instance method makes a network round-trip to lock the REF in the database. After this call, programmers can modify the attribute values of the associated row object exclusively. Then a call to the Flush instance method on the OracleRef or FlushCache method on the OracleConnection flushes the changes to the database.
If true is passed, this method blocks, that is, does not return, until the lock is acquired. Consequently, the return value is always true.
If false is passed, this method immediately returns. The return value indicates true if the lock is acquired, and false if it is not.
This method updates the object referenced by the specified REF in the database using the specified custom object.
// C# public void Update(object customObject, bool bFlush);
customObject
The custom object used to update the referenced object.
bFlush
A boolean that specifies if the changes must be flushed immediately. If bFlush is set to true, this method invocation flushes the changes immediately.
InvalidOperationException - The specified connection is not open or the custom object does not map to the type of referenced object.
This method marks the specified REF for update. Depending on whether the value of bFlush is set to true or false, the following occurs:
True
The object referenced by the specified REF is updated immediately in the database.
Before flushing objects, it is required that the application has explicitly started a transaction by executing the BeginTransaction method on the OracleConnection object. This is because if the object being flushed has not already been locked by the application, an exclusive lock is obtained implicitly for the object. The lock is only released when the transaction commits or rollbacks.
False
The object referenced by the REF is not updated immediately in the database, but only when a subsequent Flush method is invoked for the specified REF or the FlushCache method is invoked for the specified connection.
The connection must be opened explicitly by the application. This method does not open the connection implicitly.