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.