0

何らかの理由でこれ:

[Transaction]
public void DoSomething()
{
    ...
}

次のようにトランザクションを明示的に使用する必要があります。

public void DoSomething()
{
    using (var tx = NHibernateSession.Current.BeginTransaction())
    {
        ....
        tx.Commit();
    }
}

理由はありますか?

私はこのようなものをブートストラップするために使用しています:

_container = new WindsorContainer();
ComponentRegistrar.AddComponentsTo(_container);

...

ServiceLocator.SetLocatorProvider(() => new WindsorServiceLocator(_container));

ComponentRegistrar.AddComponentsTo(_container, typeof(NHibernateTransactionManager));

NHibernateSession.Init(new ThreadSessionStorage(),
        new[] { "Bla.Domain.dll" },
        new AutoPersistenceModelGenerator().Generate(),
        "NHibernate.config");
4

2 に答える 2

1

Doan が言ったように、メソッドを持つコンポーネントはプロキシされません。

メソッドは仮想ではないため、クラスがインターフェイスを実装していると想定しています。実装クラスではなく、インターフェイスとして定義された DoSomething を呼び出すクラスに依存関係があることを確認してください。

コードをデバッグし、オブジェクトのランタイム タイプを確認すると、キャッスル プロキシである必要があります。

詳細については、Sharp Architecture contrib wiki https://github.com/sharparchitecture/Sharp-Architecture-Contrib/wiki/Troubleshootingのトラブルシューティング セクションを確認してください。

于 2013-09-22T23:59:57.223 に答える