2012-03-21 9 views
0

Я начал с nhibernate, где мне нужно создать приложение, которое pperforms добавит, обновит и удалит функциональность my Add and Update отлично работает Но при удалении поля ineed, чтобы изменить флаг на True .. .. но некоторые, как я не в состоянии сделать это мой контроллерполучение ошибки при обновлении поля

public ActionResult Delete(int id) 
    { 
     Product_Master pm = new Product_MasterService().GetProduct_Data(id); 
        return View(pm); 
    } 

[HttpDelete] 
    public ActionResult Delete(Product_Master Prod) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       new Product_MasterService().DeleteProd(Prod); 
       return RedirectToAction("Index"); 
      } 
      return View(Prod); 
     } 
     catch 
     { 
      return View(); 
     } 
    } 

на мой взгляд

<h3>Are you sure you want to delete this?</h3> 

Hobby_Master

<div class="display-label">Product_Id</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.product_Id) 
</div> 

<div class="display-label">Product_Name</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.product_Name) 
</div> 
@using (Html.BeginForm()) { 
<p> 
    <input type="submit" value="Delete" /> | 
    @Html.ActionLink("Back to List", "Index") 
</p> 
} 

я использовал NHibernate и Mvc и написал функцию в Product_MasterService() следующим

public bool DeleteProd(Product_Master Prod) 
    { 
     log.Debug("Start"); 
     ISession session = DataAccessLayerHelper.OpenWriterSession(); 
     ITransaction transaction = session.BeginTransaction(); 

      try 
     { 
      Prod.Deleted = 'T'; 
      session.SaveOrUpdate(Prod); 
      transaction.Commit(); 

      return true; 
     } 
     catch (Exception ex) 
     { 
      if (transaction != null && transaction.IsActive) 
       transaction.Rollback(); 

      log.Error(ex); 
      return false; 
     } 
     finally 
     { 
      if (transaction != null) 
       transaction.Dispose(); 

      if (session != null && session.IsConnected) 
       session.Close(); 

      log.Debug("End"); 
     }   } 

Может ли один помочь мне с этим ......

ответ

0

вам нужно закрыть сеанс сессии session.Close();

+0

Я forgt скопировать эту часть ... его в дер д коде .... –

+0

вы положили его после возвращения, так что он никогда не звонил. положите его перед возвращением. – ivowiblo

+0

Его в конце блок .... так что я думаю, он будет называться anyways ... –

0

Я думаю, что ivowiblo прав, вы не можете вернуть значение из try/catch. Вы можете использовать локальную переменную:

 var hasSuccessSave = false; 
     try 
     { 
      Prod.Deleted = 'T'; 
      session.SaveOrUpdate(Prod); 
      transaction.Commit(); 

      hasSuccessSave = true; 
     } 
     catch (Exception ex) 
     { 
      if (transaction != null && transaction.IsActive) 
       transaction.Rollback(); 

      log.Error(ex); 
     } 
     finally 
     { 
      if (transaction != null) 
       transaction.Dispose(); 

      if (session != null && session.IsConnected) 
       session.Close(); 

      log.Debug("End"); 
     }  
     return hasSuccessSave; 
Смежные вопросы