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 は巨大なため、ラップすることは不可能に見えます。1 つの解決策は、データをプルする必要があるすべての場所で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 に答える