0

我将 Nhibernate 会话包装如下。

public interface IDalSession : IDisposable
{
    void MarkForRollBack();
    void End();
    IDalSession Start();
    IDalSession StartWithTransaction();
    T Save<T>(T entity);
    T CreateQuery<T>(string query);
    //ISession GetHibernateSession { get; }
}

我真的很想使用 QueryOver 作为我的主要查询。QueryOver API 看起来不可能被包装,因为它很大。一种解决方案是在我需要提取数据的所有地方使用 NHibernate ISession( )。GetHibernateSession但它非常难看。
这里的解决方法是什么?如何包装 QueryOver?谢谢

4

1 回答 1

2

你是这个意思吗?

    public interface IDalSession : IDisposable
    {
        void MarkForRollBack();
        void End();
        IDalSession Start();
        IDalSession StartWithTransaction();
        T Save<T>(T entity);
        T CreateQuery<T>(string query);
        IQueryOver<T,T> NewQueryOver<T>(); // check me out
        //ISession GetHibernateSession { get; }
    }

    ...

     public IQueryOver<T,T> NewQueryOver<T>()
        {

          return Session.QueryOver<T>();
        }

您可能会收到一些关于从其他层隐藏任何 NH 的评论,因此能够将新的 linq 传递回 NH 查询作为它的IQueryable

 public virtual IQueryable<T> NewQuery<T>()
    {
      return Session.Query<T>();
    }

但我个人更喜欢 QueryOver API,因此我将数据访问封装到具体的存储库中。S#arp 架构做得很好:

于 2012-08-18T08:54:30.747 回答