मैं अपने डोमेन के साथ NHibernate में मुद्दों पर चल रहा हूं। मैं "सत्र बंद हो रहा है!" त्रुटियों। कुछ एक तो कृपया मुझे जब प्रत्येक उपयोग करने के लिए निम्न विधियों में से एक परिभाषा और सहित सही पैटर्न दिखा सकते हैं:NHHernate ISession ऑब्जेक्ट का सही तरीके से उपयोग कैसे करें - सत्र बंद है! त्रुटियां
ISession.Close()
ISession.Dispose()
ISession.Disconnect()
यहाँ मेरी समस्या है। मेरे पास एक प्रक्रिया को बंद करने के लिए एक कॉलबैक सेटअप है जो प्रत्येक दो मिनट के खिलाड़ियों को पुरस्कार बैज देता है। हालांकि मैं "सत्र बंद हो रहा है!" संग्रह को जोड़ने में सक्षम नहीं होने के बारे में त्रुटियां या त्रुटियां।
public class NHibernateRepository : IRepository
{
#region Fields
private ISession _session;
private readonly ISessionFactory _sessionFactory;
#endregion
#region Constructors
public NHibernateRepository(ISessionFactory sessionFactory)
{
_sessionFactory = sessionFactory;
}
#endregion
#region IRepository Implementation
public ISession OpenSession()
{
_session = _sessionFactory.OpenSession();
return _session;
}
public IQueryable<TModel> All<TModel>()
{
return _session.Linq<TModel>();
}
public void Save<TModel>(TModel model)
{
_session.Save(model);
}
public void Update<TModel>(TModel model)
{
_session.Update(model);
}
public void Delete<TModel>(TModel model)
{
_session.Delete(model);
}
public ITransaction BeginTransaction()
{
return _session.BeginTransaction();
}
public void Flush()
{
_session.Flush();
}
#endregion
}
यहाँ मेरी उपयोग है:
यहाँ मेरी भंडार है। भंडार नक्शा
private Object _awardBadgesLock = new object(); //In case the callback happens again before the previous one completes
public void AwardBadges()
{
lock (_awardBadgesLock)
{
using(session = _repository.OpenSession())
{
foreach (var user in _repository.All<User>().ToList())
{
var userPuzzles = _repository.All<Puzzle>().ByUser(user.Id).ToList();
var userVotes = _repository.All<Vote>().Where(x => x.UserId == user.Id).ToList();
var userSolutions = _repository.All<Solution>().ByUser(user.Id).ToList().Where(x => !userPuzzles.Select(y => y.Id).Contains(x.PuzzleId));
var ledPuzzles = GetPuzzlesLedByUser(user.Id);
AwardPlayerBadge(user, userSolutions);
AwardCriticBadge(user, userVotes);
AwardCreatorBadge(user, userPuzzles);
AwardRidlerBadge(user, userPuzzles);
AwardSupporterBadge(user, userVotes);
AwardPopularBadge(user, userPuzzles);
AwardNotableBadge(user, userPuzzles);
AwardFamousBadge(user, userPuzzles);
AwardLeaderBadge(user, ledPuzzles);
using (var tx = _repository.BeginTransaction())
{
_repository.Update(user);
tx.Commit();
}
}
}
}
}
क्या यह एक वेब ऐप है? – mxmissile
हां मैं एक वेब ऐप हूं लेकिन मैं वेब सत्र के साथ एनएचबीर्नेट सत्र को एकीकृत नहीं कर रहा हूं। – Micah
क्या _repository कहीं और इस्तेमाल किया जा रहा है?क्योंकि, एक और ओपनसेशन() कॉल पहले खो देगा। – dotjoe