This has to do with the FlushMode of the ISession. By default, you have to
explicitly Flush the ISession manually, or, if you start and commit a
transaction, it is done for you.
This is by design, pretty much like Entity Framework, where you have to
call SaveChanges.
RP
On Monday, April 21, 2014 11:52:04 AM UTC+1, Veasna MUCH wrote:
>
> I am very new to NHibernate. I try to use some NH methods. I am able
> to get all records in grid, save new records but no able to delete the
> records from db. Not even getting any kind of exception..
> using the method as NHibernateSession.Delete(entity); //entity is
> retrieved using GetByAirportCode("A1") //A1 is an code of the record that
> I want to delete. I get object with Code = "A1" but it does not delete that
> record from DB. When I added the code *objAirportDao.CommitChanges(); *the
> record is deleted from DB. I do no understand why do I need to apply
> commitchange here? It should be automatically right? if that's the need why
> does the Saving record does not need to applied CommitChange?
>
>
>
> Here is where I call delete object in *default.aspx.cs*
>
>
>
> protected void Button1_Click(object sender, EventArgs e) {
>>
> IRepositoryFactory daoFactory = new NHibernateDaoFactory();
>
>> IAirportRepository objAirportDao = daoFactory.GetAirportDao();
>> Airport objAirport = objAirportDao.GetByAirportCode ("A1");
>
> if (objAirport != null){
>>
>> * objAirportDao.Delete(objAirport);
>> //objAirportDao.CommitChanges(); *
>> }
>
>
>> }
>
>
>
>
>
> *Class AirportRepository *
>
>
>
>
>>
>>
>>
>>
>>
>> * public class AirportRepository : AbstractNHibernateRepository<Airport,
>> int>, IAirportRepository { public AirportRepository() { }
>> public Airport GetByAirportCode(string airportCode) { return
>> GetByCriteria(new ICriterion[] { Expression.Eq("AirportCode", airportCode
>> )}).ToList<Airport>().FirstOrDefault(); } }*
>
>
>
> *Class NHibernateSessionFactory*
>
> public class NHibernateSessionFactory{
>> public static NHibernateSessionFactory Instance
>> {
>> get {
>> return Nested.NHibernateSessionFactory;
>> }
>> }
>>
>> private NHibernateSessionFactory(){
>> InitSessionFactory();
>> }
>>
>> private class Nested {
>> static Nested() { }
>> internal static readonly NHibernateSessionFactory
>> NHibernateSessionFactory = new NHibernateSessionFactory();
>> }
>>
>> private void InitSessionFactory(){
>> sessionFactory = new
>> Configuration().Configure().BuildSessionFactory();
>> }
>>
>> public void RegisterInterceptor(IInterceptor interceptor) {
>> ISession session = ContextSession;
>> if (session != null && session.IsOpen)
>> {
>> throw new CacheException("You cannot register an
>> interceptor once a session has already been opened");
>> }
>> GetSession(interceptor);
>> }
>> public ISession GetSession(){
>> return GetSession(null);
>> }
>>
>> private ISession GetSession(IInterceptor interceptor) {
>> ISession session = ContextSession;
>> if (session == null){
>> if (interceptor != null){
>> session = sessionFactory.OpenSession(interceptor);
>> }else{
>> session = sessionFactory.OpenSession();
>> }
>> ContextSession = session;
>> }
>> return session;
>> }
>>
>> public void CloseSession(){
>> ISession session = ContextSession;
>> if (session != null && session.IsOpen){
>> session.Flush();
>> session.Close();
>> }
>> ContextSession = null;
>> }
>>
>
>
>> public void BeginTransaction() {
>> ITransaction transaction = ContextTransaction;
>> if (transaction == null){
>> transaction = GetSession().BeginTransaction();
>> ContextTransaction = transaction;
>> }
>> }
>>
>
>
>> public void CommitTransaction(){
>> ITransaction transaction = ContextTransaction;
>> try
>> {
>> if (HasOpenTransaction()) {
>> transaction.Commit();
>> ContextTransaction = null;
>> }
>> } catch (HibernateException){
>> RollbackTransaction();
>> throw;
>> }
>> }
>>
>
>
>> public bool HasOpenTransaction(){
>> ITransaction transaction = ContextTransaction;
>> return transaction != null && !transaction.WasCommitted &&
>> !transaction.WasRolledBack;
>> }
>>
>
>
>> public void RollbackTransaction(){
>> ITransaction transaction = ContextTransaction;
>> try
>> {
>> if (HasOpenTransaction()){
>> transaction.Rollback();
>> }
>> ContextTransaction = null;
>> }
>> finally
>> {
>> CloseSession();
>> }
>> }
>>
>> private ITransaction ContextTransaction{
>> get
>> {
>> if (IsInWebContext()){
>> return
>> (ITransaction)HttpContext.Current.Items[TRANSACTION_KEY];
>> }else{
>> return
>> (ITransaction)CallContext.GetData(TRANSACTION_KEY);
>> }
>> }
>> set
>> {
>> if (IsInWebContext()){
>> HttpContext.Current.Items[TRANSACTION_KEY] = value;
>> }else{
>> CallContext.SetData(TRANSACTION_KEY, value);
>> }
>> }
>> }
>>
>> private ISession ContextSession{
>> get
>> {
>> if (IsInWebContext())
>> {
>> return
>> (ISession)HttpContext.Current.Items[SESSION_KEY];
>> }
>> else
>> {
>> return (ISession)CallContext.GetData(SESSION_KEY);
>> }
>> }
>> set
>> {
>> if (IsInWebContext())
>> {
>> HttpContext.Current.Items[SESSION_KEY] = value;
>> }
>> else
>> {
>> CallContext.SetData(SESSION_KEY, value);
>> }
>> }
>> }
>>
>
>
>> private bool IsInWebContext() {
>> return HttpContext.Current != null;
>> }
>> private const string TRANSACTION_KEY = "CONTEXT_TRANSACTION";
>> private const string SESSION_KEY = "CONTEXT_SESSION";
>> private ISessionFactory sessionFactory;
>> }
>
>
>
>
>
> *Here is my abstract class AbstractNHibernateRepository:*
>
>
> public abstract class AbstractNHibernateRepository<T, IdT> :
>> IRepository<T, IdT> {
>>
>>
>>
>> public T GetById(IdT id, bool shouldLock){
>> T entity;
>> if (shouldLock) {
>> entity = (T)NHibernateSession.Load(persitentType, id,
>> LockMode.Upgrade);
>> } else {
>> entity = (T)NHibernateSession.Load(persitentType, id);
>> }
>> return entity;
>> }
>>
>> public List<T> GetAll() {
>> return GetByCriteria();
>> }
>>
>> public List<T> GetByCriteria(params ICriterion[] criterion) {
>> ICriteria criteria =
>> NHibernateSession.CreateCriteria(persitentType);
>> foreach (ICriterion criterium in criterion)
>> {
>> criteria.Add(criterium);
>> }
>> return criteria.List<T>() as List<T>;
>> }
>>
>> public List<T> GetByExample(T exampleInstance, params string[]
>> propertiesToExclude) {
>> ICriteria criteria =
>> NHibernateSession.CreateCriteria(persitentType);
>> Example example = Example.Create(exampleInstance);
>> foreach (string propertyToExclude in propertiesToExclude) {
>> example.ExcludeProperty(propertyToExclude);
>> }
>> criteria.Add(example);
>> return criteria.List<T>() as List<T>;
>> }
>>
>>
>>
>
>> public T GetUniqueByExample(T exampleInstance, params string[]
>> propertiesToExclude) {
>> List<T> foundList = GetByExample(exampleInstance,
>> propertiesToExclude);
>> if (foundList.Count > 1) {
>> throw new NonUniqueResultException(foundList.Count);
>> }
>> if (foundList.Count > 0){
>> return foundList[0];
>> } else {
>> return default(T);
>> }
>> }
>>
>>
>>
>
>> public T Save(T entity){
>> NHibernateSession.Save(entity);
>> return entity;
>> }
>>
>> public T SaveOrUpdate(T entity) {
>> NHibernateSession.SaveOrUpdate(entity);
>> return entity;
>> }
>>
>>
>
>> public void Delete(T entity){
>> NHibernateSession.Delete(entity);
>> }
>>
>> public void CommitChanges() {
>> if (NHibernateSessionFactory.Instance.HasOpenTransaction())
>> {
>> NHibernateSessionFactory.Instance.CommitTransaction();
>> } else{
>> NHibernateSessionFactory.Instance.GetSession().Flush();
>> }
>> }
>>
>> private ISession NHibernateSession{
>> get {
>> return NHibernateSessionFactory.Instance.GetSession();
>> }
>> }
>> private Type persitentType = typeof(T);
>> }
>>
>>
>
>
>
>
--
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers.
For more options, visit https://groups.google.com/d/optout.