Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.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 windows服务中的sharp架构contrib事务属性_Nhibernate_S#arp Architecture - Fatal编程技术网

Nhibernate windows服务中的sharp架构contrib事务属性

Nhibernate windows服务中的sharp架构contrib事务属性,nhibernate,s#arp-architecture,Nhibernate,S#arp Architecture,出于某种原因: [Transaction] public void DoSomething() { ... } 不起作用我仍然必须像这样显式地使用事务: public void DoSomething() { using (var tx = NHibernateSession.Current.BeginTransaction()) { .... tx.Commit(); } } 你知道为什么吗 我用这样的东西来引导东西: _co

出于某种原因:

[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");

通常,此类问题是由调用提供事务管理服务的动态代理失败引起的。两个最常见的错误是:

  • 无法代理该方法:很可能未实现任何接口方法,或者对象未代理
  • 该方法是从同一个类调用的,该类绕过了所有代理
编辑:


我猜你用温莎城堡作为国际奥委会的容器。
[Transaction]
装饰需要自动事务管理设施才能工作。如果您成功地配置了设施,即使
[Transaction]
在一种方法中工作,而不是在另一种方法中工作,则上述答案适用。如果所有事务修饰都无法工作,那么您必须首先检查设施的配置。

正如Doan所说,具有该方法的组件没有代理

由于该方法不是虚拟的,所以我假设您的类正在实现一个接口。确保调用DoSomething的类中的依赖项定义为接口,而不是实现类

如果调试代码并检查对象的运行时类型,则它应该是castle代理

有关更多详细信息,请查看Sharp Architecture contrib wiki上的故障排除部分

谢谢。你能再具体一点吗。哪个方法等?有问题的方法,即您放置
[Transaction]
装饰但未能启动事务的方法,如您的示例中的
DoSomething()
。我假设事务管理器是通过以下方式定义的:componentregister.AddComponentsTo(_container,typeof(NHibernateTransactionManager));谢谢你自己。顺便说一句,s#arp最近似乎处于休眠状态。你认为这会改变吗?是的,我一直很忙,没有在工作中使用它。很快就要上车了那就不用换EF5了吧?(:@SeifAttar-我在这个项目中使用MVC5和Web API 2.2,我们同时使用MVC控制器和Web API控制器,挑战是[Transaction]属性在MVC控制器上运行良好,但在Web API控制器上不起作用。我没有发现夏普体系结构对Web API的支持。是否有任何此类支持可用或计划提供?我尝试了一些解决方法,但不起作用。