You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,152 @@
|
||||
//---------------------------------------------------------------------
|
||||
// <copyright file="EntityTransaction.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//
|
||||
// @owner [....]
|
||||
// @backupOwner [....]
|
||||
//---------------------------------------------------------------------
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
using System.Data;
|
||||
using System.Data.Common;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace System.Data.EntityClient
|
||||
{
|
||||
using Metadata.Edm;
|
||||
|
||||
/// <summary>
|
||||
/// Class representing a transaction for the conceptual layer
|
||||
/// </summary>
|
||||
public sealed class EntityTransaction : DbTransaction
|
||||
{
|
||||
private EntityConnection _connection;
|
||||
private DbTransaction _storeTransaction;
|
||||
|
||||
/// <summary>
|
||||
/// Constructs the EntityTransaction object with an associated connection and the underlying store transaction
|
||||
/// </summary>
|
||||
/// <param name="connection">The EntityConnetion object owning this transaction</param>
|
||||
/// <param name="storeTransaction">The underlying transaction object</param>
|
||||
internal EntityTransaction(EntityConnection connection, DbTransaction storeTransaction)
|
||||
: base()
|
||||
{
|
||||
Debug.Assert(connection != null && storeTransaction != null);
|
||||
|
||||
this._connection = connection;
|
||||
this._storeTransaction = storeTransaction;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The connection object owning this transaction object
|
||||
/// </summary>
|
||||
public new EntityConnection Connection
|
||||
{
|
||||
get
|
||||
{ // follow the store transaction behavior
|
||||
return ((null != _storeTransaction.Connection) ? _connection : null);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The connection object owning this transaction object
|
||||
/// </summary>
|
||||
protected override DbConnection DbConnection
|
||||
{
|
||||
get
|
||||
{ // follow the store transaction behavior
|
||||
return ((null != _storeTransaction.Connection) ? _connection : null);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The isolation level of this transaction
|
||||
/// </summary>
|
||||
public override IsolationLevel IsolationLevel
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._storeTransaction.IsolationLevel;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the DbTransaction for the underlying provider transaction
|
||||
/// </summary>
|
||||
internal DbTransaction StoreTransaction
|
||||
{
|
||||
get
|
||||
{
|
||||
return this._storeTransaction;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Commits the transaction
|
||||
/// </summary>
|
||||
public override void Commit()
|
||||
{
|
||||
try
|
||||
{
|
||||
this._storeTransaction.Commit();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (EntityUtil.IsCatchableExceptionType(e))
|
||||
{
|
||||
throw EntityUtil.Provider(@"Commit", e);
|
||||
}
|
||||
throw;
|
||||
}
|
||||
|
||||
this.ClearCurrentTransaction();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Rolls back the transaction
|
||||
/// </summary>
|
||||
public override void Rollback()
|
||||
{
|
||||
try
|
||||
{
|
||||
this._storeTransaction.Rollback();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (EntityUtil.IsCatchableExceptionType(e))
|
||||
{
|
||||
throw EntityUtil.Provider(@"Rollback", e);
|
||||
}
|
||||
throw;
|
||||
}
|
||||
|
||||
this.ClearCurrentTransaction();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Cleans up this transaction object
|
||||
/// </summary>
|
||||
/// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources</param>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
this.ClearCurrentTransaction();
|
||||
this._storeTransaction.Dispose();
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Helper method to wrap EntityConnection.ClearCurrentTransaction()
|
||||
/// </summary>
|
||||
private void ClearCurrentTransaction()
|
||||
{
|
||||
if (_connection.CurrentTransaction == this)
|
||||
{
|
||||
_connection.ClearCurrentTransaction();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user