Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nhibernate 这是错误的原因。现在,我只需要控制transactionscope中的会话连接(在我的情况下,应该不需要dist trans)就可以让它工作 [Test] public void Commit_ItemToCommitContainsSta_Nhibernate - Fatal编程技术网

Nhibernate 这是错误的原因。现在,我只需要控制transactionscope中的会话连接(在我的情况下,应该不需要dist trans)就可以让它工作 [Test] public void Commit_ItemToCommitContainsSta

Nhibernate 这是错误的原因。现在,我只需要控制transactionscope中的会话连接(在我的情况下,应该不需要dist trans)就可以让它工作 [Test] public void Commit_ItemToCommitContainsSta,nhibernate,Nhibernate,这是错误的原因。现在,我只需要控制transactionscope中的会话连接(在我的情况下,应该不需要dist trans)就可以让它工作 [Test] public void Commit_ItemToCommitContainsStaleData_ThrowsStaleObjectStateException() { using (new TransactionScope()) { // arrange

这是错误的原因。现在,我只需要控制transactionscope中的会话连接(在我的情况下,应该不需要dist trans)就可以让它工作
    [Test]
    public void Commit_ItemToCommitContainsStaleData_ThrowsStaleObjectStateException()
    {
        using (new TransactionScope())
        {
            // arrange
            RootUnitOfWorkFactory factory = CreateUnitOfWorkFactory();
            const int Id = 1;

            WorkItemRepository firstRepository = new WorkItemRepository(factory);
            WorkItem itemToChange = WorkItem.Create(Id);
            firstRepository.Commit(itemToChange);

            WorkItemRepository secondRepository = new WorkItemRepository(factory);
            WorkItem copyOfItemToChange = secondRepository.Get(Id);

            // act
            copyOfItemToChange.ChangeDescription("A");
            secondRepository.Commit(copyOfItemToChange);

            itemToChange.ChangeDescription("B");

            // assert
            Assert.Throws<StaleObjectStateException>(() => firstRepository.Commit(itemToChange));
        }
    }
/// <summary>
/// A connection provider which returns the same db connetion while
/// there exists a TransactionScope.
/// </summary>
public sealed class AmbientTransactionAwareDriverConnectionProvider : IConnectionProvider
{
    private readonly bool disposeDecoratedProviderWhenDisposingThis;
    private IConnectionProvider decoratedProvider;
    private IDbConnection maintainedConnectionThroughAmbientSession;

    public AmbientTransactionAwareDriverConnectionProvider()
        : this(new DriverConnectionProvider(), true)
    {}

    public AmbientTransactionAwareDriverConnectionProvider(IConnectionProvider decoratedProvider,
                                                      bool disposeDecoratedProviderWhenDisposingThis)
    {
        Guard.AssertNotNull(decoratedProvider, "decoratedProvider");
        this.decoratedProvider = decoratedProvider;
        this.disposeDecoratedProviderWhenDisposingThis = disposeDecoratedProviderWhenDisposingThis;
    }

    ~AmbientTransactionAwareDriverConnectionProvider()
    {
        Dispose(false);
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    public void Configure(IDictionary<string, string> settings)
    {
        this.decoratedProvider.Configure(settings);
    }

    public void CloseConnection(IDbConnection conn)
    {
        if (Transaction.Current == null)
            this.decoratedProvider.CloseConnection(conn);
    }

    public IDbConnection GetConnection()
    {
        if (Transaction.Current == null)
        {
            if (this.maintainedConnectionThroughAmbientSession != null)
                this.maintainedConnectionThroughAmbientSession.Dispose();

            return this.decoratedProvider.GetConnection();
        }

        if (this.maintainedConnectionThroughAmbientSession == null)
            this.maintainedConnectionThroughAmbientSession = this.decoratedProvider.GetConnection();

        return this.maintainedConnectionThroughAmbientSession;
    }

    private void Dispose(bool disposing)
    {
        if (this.maintainedConnectionThroughAmbientSession != null)
            CloseConnection(this.maintainedConnectionThroughAmbientSession);

        if (this.disposeDecoratedProviderWhenDisposingThis && this.decoratedProvider != null)
            this.decoratedProvider.Dispose();

        if (disposing)
        {
            this.decoratedProvider = null;
            this.maintainedConnectionThroughAmbientSession = null;
        }
    }

    public IDriver Driver
    {
        get { return this.decoratedProvider.Driver; }
    }

}