Thanks for Ciao, Oskar

My DAO code as follow:

SessionManager.cs
=========================================================================================================
public sealed class SessionManager : IDisposable
    {
        private ISessionFactory sessionFactory;
        private Configuration cfg;
        private ISession session;
        private ITransaction trans;

        public static SessionManager Instance
        {
            get
            {
                return Nested.nHibernateSessionManager;
            }
        }

        private class Nested
        {
            static Nested() { }
            internal static readonly SessionManager
nHibernateSessionManager = new SessionManager();
        }

        private Configuration ReadConfig(string connstring)
        {
            ReadProperty(connstring);
            ReadMap();
            return cfg;
        }

        private Configuration ReadProperty(string connstring)
        {
            if (string.IsNullOrWhiteSpace(connstring))
                throw new ApplicationException("Connection string
cann't empty!");

 
cfg.SetProperty(NHibernate.Cfg.Environment.CollectionTypeFactoryClass,
typeof(uNhAddIns.WPF.Collections.WpfCollectionTypeFactory).AssemblyQualifiedName);
 
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionProvider,
typeof(NHibernate.Connection.DriverConnectionProvider).AssemblyQualifiedName);
 
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionString,
connstring);
            cfg.SetProperty(NHibernate.Cfg.Environment.Dialect,
typeof(NHibernate.Dialect.MsSql2008Dialect).AssemblyQualifiedName);
 
cfg.SetProperty(NHibernate.Cfg.Environment.ConnectionDriver,
typeof(NHibernate.Driver.SqlClientDriver).AssemblyQualifiedName);
            cfg.SetProperty(NHibernate.Cfg.Environment.ShowSql,
"true");
            cfg.SetProperty(NHibernate.Cfg.Environment.DefaultSchema,
"dbo");
 
cfg.SetProperty(NHibernate.Cfg.Environment.ProxyFactoryFactoryClass,
typeof(NHibernate.ByteCode.Castle.ProxyFactoryFactory).AssemblyQualifiedName);

            return cfg;
        }

        private Configuration ReadMap()
        {
            cfg.AddAssembly("DomainAssembly");

            return cfg;
        }

        public ISession GetSession(string connstring)
        {
                if (cfg == null)
                {
                    cfg = new Configuration();
                    cfg = ReadConfig(connstring);
                }

                if (sessionFactory == null)
                    sessionFactory = cfg.BuildSessionFactory();

                return OpenSession();
        }

        private ISession OpenSession()
        {
            if (session == null || !session.IsOpen || !
session.IsConnected)
                session = sessionFactory.OpenSession();

            return session;
        }

        public void Dispose()
        {
            if (session != null)
                session.Dispose();
        }

        public void CloseSession()
        {
            try
            {
                if (session != null)
                {
                    session.Flush();
                    session.Close();
                }
            }
            finally
            {
                session.Dispose();
            }
        }

        public void BeginTransaction(string connstring)
        {
            if (trans == null)
            {
                trans = GetSession(connstring).BeginTransaction();
            }
        }

        public void CommitTransaction()
        {
            try
            {
                if (trans != null && !trans.WasCommitted && !
trans.WasRolledBack)
                {
                    trans.Commit();
                }
            }
            catch (Exception ex)
            {
                RollbackTransaction();
                throw ex;
            }
        }

        public void RollbackTransaction()
        {
            try
            {
                if (trans != null && !trans.WasCommitted && !
trans.WasRolledBack)
                {
                    trans.Rollback();
                }
            }
            finally
            {
                CloseSession();
            }
        }
    }
=========================================================================================================

ManagerBase.cs
=========================================================================================================
public class ManagerBase<T> where T : DomainBase
    {
        public ReturnValueBoolean Refresh(T obj)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                session.Refresh(obj);
                session.Flush();
                SessionManager.Instance.CommitTransaction();
                obj.ClearChanged();

                return new ReturnValueBoolean(0, true, "Success");
        }

        public ReturnValueBoolean Save(T obj)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                session.Save(obj);
                session.Flush();
                SessionManager.Instance.CommitTransaction();
                obj.ClearChanged();

                return new ReturnValueBoolean(0, true, "Success");
        }

        public ReturnValueBoolean Update(T obj)
        {

 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                session.Update(obj);
                session.Flush();
                SessionManager.Instance.CommitTransaction();
                obj.ClearChanged();

                return new ReturnValueBoolean(0, true, "Success");
        }

        public ReturnValueBoolean SaveOrUpdate(T obj)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                session.SaveOrUpdate(obj);
                session.Flush();
                SessionManager.Instance.CommitTransaction();
                obj.ClearChanged();

                return new ReturnValueBoolean(0, true, "Success");
        }

        public ReturnValueBoolean SaveOrUpdate(IList<T> lobj)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                foreach (T obj in lobj)
                {
                    session.SaveOrUpdate(obj);
                    obj.ClearChanged();
                }
                session.Flush();
                SessionManager.Instance.CommitTransaction();

                return new ReturnValueBoolean(0, true, "Success");
        }

        public ReturnValueBoolean Delete(T obj)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                session.Delete(obj);
                session.Flush();
                SessionManager.Instance.CommitTransaction();

                return new ReturnValueBoolean(0, true, "Success");
        }

        public ReturnValue<T> Get(int id)
        {
                if (id <= 0)
                    return new ReturnValue<T>(1, default(T),
"failed");
                else
                {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                    ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);

                    T rt = session.Get<T>(id);
                    SessionManager.Instance.CommitTransaction();
                    if (rt == null)
                        return new ReturnValue<T>(1, null, "failed");
                    else
                        return new ReturnValue<T>(0, rt, "Success");
                }
        }

        public ReturnValue<IList<T>> Select(string orderfield)
        {

 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);
                ICriteria criteria;
                if (string.IsNullOrWhiteSpace(orderfield))
                    criteria = session.CreateCriteria(typeof(T));
                else
                    criteria =
session.CreateCriteria(typeof(T)).AddOrder(Order.Asc(orderfield));

                IList<T> rt = criteria.List<T>();
                SessionManager.Instance.CommitTransaction();
                return new ReturnValue<IList<T>>(0, rt, "Success");
        }

        public ReturnValue<IList<T>> GetList()
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ReturnValue<IList<T>> ilu = Select(string.Empty);
                ReturnValue<IList<T>> rt;
                if (ilu.Flag == 0)
                {
                    rt = new ReturnValue<IList<T>>(0, ilu.Value,
"Success");
                }
                else
                {
                    rt = new ReturnValue<IList<T>>(-1, null,
ilu.Message);
                }

                SessionManager.Instance.CommitTransaction();
                return rt;
        }

        public ReturnValue<IList<T>> Query(QueryCriteria<T>
queryCriteria)
        {

 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                IList<T> rt = queryCriteria.Criteria.List<T>();

                SessionManager.Instance.CommitTransaction();
                return new ReturnValue<IList<T>>(0, rt, "Success");
        }

        public ReturnValue<IList<T>> Query(QueryCriterion
queryCriterion, string subPropertyName, QueryCriterion subCriterion)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);
                IList<T> rt =
session.CreateCriteria(typeof(T)).Add(queryCriterion.Criterion).CreateCriteria(subPropertyName).Add(subCriterion.Criterion).List<T>();
                SessionManager.Instance.CommitTransaction();
                return new ReturnValue<IList<T>>(0, rt, "Success");
        }

        public ReturnValue<IList<T>> Query(T obj)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);
                IList<T> rt =
session.CreateCriteria(typeof(T)).Add(Example.Create(obj)).List<T>();
                SessionManager.Instance.CommitTransaction();
                return new ReturnValue<IList<T>>(0, rt, "Success");
        }

        public ReturnValue<IList> Query(QueryCriterion queryCriterion,
QueryProjection queryProjection)
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);
                IList rt =
session.CreateCriteria(typeof(T)).Add(queryCriterion.Criterion).SetProjection(queryProjection.ProjectionList).List();
                SessionManager.Instance.CommitTransaction();
                return new ReturnValue<IList>(0, rt, "Success");
        }

        public ReturnValue<DateTime?> GetDateFromServer()
        {
 
SessionManager.Instance.BeginTransaction(RunTime.ConnString);
                ISession session =
SessionManager.Instance.GetSession(RunTime.ConnString);
                IQuery q = session.GetNamedQuery("CurrentDate");
                var date = q.UniqueResult<DateTime>();
                SessionManager.Instance.CommitTransaction();
                RunTime.ServerDateTime = date;
                return new ReturnValue<DateTime?>(0, date, "Success");
        }
    }
=========================================================================================================

How do i change code to fixed this problem?

Regards,
litgle

On 5月23日, 下午3时48分, Giulio Petrucci <[email protected]> wrote:
> Hi there,
>
> 2011/5/22 Oskar Berggren <[email protected]>:
>
> > Don't do that.
>
> +1.
>
> Ciao,
> Giulio
>
> --

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/nhusers?hl=en.

Reply via email to