gpt4 book ai didi

.net - NHibernate:多个实体,一个事务-多个存储库?

转载 作者:行者123 更新时间:2023-12-02 04:14:32 26 4
gpt4 key购买 nike

我正在使用NHibernate,WCF和Oracle 11g R1开发Web服务。 Web服务非常简单:它将DTO映射到POCO,并根据调用的操作对其进行各种CRUD操作。每个实体都有自己的一组CRUD方法-这是临时的,但暂时是必需的。

我正在寻找一种良好的存储库模式的输入,该存储库模式现在将支持此1:1 CRUD服务层,并且在API需要变得更加健壮时不会被完全丢弃。现在,消费者将使用此服务“逐件”更新实体,但是稍后,这些操作将更强大。即服务操作将与多个实体一起使用。

因此,作为示例,我有实体A,B和C。将为A,B和C提供CRUD服务操作。当前,当使用者在本地使用A时,最常也与B和C一起使用。使用该服务与A,B和C进行交互,则需要进行三个单独的服务调用。目前,大多数业务逻辑都驻留在使用者上,但是当它进入服务层时,将创建一个服务操作,以便它可以在一次调用中与A,B和C一起使用。

我已经在存储库模式和NHibernate(以及WCF)上进行了大量的Google搜索,到目前为止,我已经阅读:

http://daniel.wertheim.se/2009/10/21/nhibernate-hbmnhibcontext-fluentnhibcontext/
NHibernate session management in WCF application
http://davybrion.com/blog/2008/06/managing-your-nhibernate-sessions/
http://davybrion.com/blog/2009/12/using-nhibernate-in-your-service-layer/
http://jeffreypalermo.com/blog/use-this-nhibernate-wrapper-to-keep-your-repository-classes-simple/

还有一堆。我要实现的两个基本目标:

  • 每个请求一个ISession
  • 每个请求一个ITransaction

  • 我认为现在每个实体都有一个存储库是有意义的,然后当服务操作变得更加复杂时,最终可以在那些聚合根存储库之上添加某种类型的聚合根存储库。甚至有必要吗?

    谢谢。

    最佳答案

    K Scott Allen撰写的MSDN上的This MSDN文章将存储库与UnitOfWork模式结合在一起。

    对于NHibernate,将使用NHibernate ISession创建UnitOfWork,如果需要,您可以处理每个UoW。显然,UoW将负责从其提供的ISession中创建各种存储库。

    public class NHibernateUnitOfWork : IUnitOfWork

    public NHibernateUnitOfWork(ISession session)
    {
    // if transacted you would begin the transaction here also
    _session = session;
    }

    private ISession _session;

    private IRepository<A> _aRepository
    public IRepository<A> ARepository
    {
    get
    {
    if(_aRepository == null)
    _aRepository = new NHibernateRepository<A>(_session);

    return _aRepository;
    }
    }

    private IRepository<B> _bRepository
    public IRepository<B> BRepository
    {
    get
    {
    if(_bRepository == null)
    _bRepository = new NHibernateRepository<B>(_session);

    return _bRepository;
    }
    }

    private IRepository<C> _cRepository
    public IRepository<C> CRepository
    {
    get
    {
    if(_cRepository == null)
    _cRepository = new NHibernateRepository<C>(_session);

    return _cRepository;
    }
    }

    public void Commit()
    {
    // if transacted you would commit the transaction here
    _session.Flush();
    }

    public void Dispose()
    {
    _session.Dispose();
    }
    }

    关于.net - NHibernate:多个实体,一个事务-多个存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3471809/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com