c# - savechanges() saving one entity and not other -


a weird situation has struck me code running 2 days back, dont know why not running before :

public static void changestatus(int sessionid, int? participantid, guid? temporaryparticipantid, int statustypeid) {     using (emsentities entities = new emsentities())     using (transactionscope ts = new transactionscope())     {         try         {             sessionparticipant sessionparticipant = null;             currentsessionseatsstatu sessioncurrentstatus = null;             if (participantid != null)             {                 sessionparticipant = entities.sessionparticipants                                              .where(a => a.sessionid == sessionid && a.participantid == participantid)                                              .firstordefault();             }             else if (temporaryparticipantid != null)             {                 sessionparticipant = entities.sessionparticipants                                              .where(a => a.sessionid == sessionid && a.temporaryparticipantid == temporaryparticipantid)                                              .firstordefault();             }             if (sessionparticipant != null)             {                 sessionparticipant.statustypeid = statustypeid; // status changed here             }             **if (sessionparticipant.statustypeid == 2) // verified status             {                 sessioncurrentstatus = entities.currentsessionseatsstatus                                                .where(a => a.sessionid == sessionid)                                                .firstordefault();                 if (sessioncurrentstatus.seatsleft > 0)                 {                     sessioncurrentstatus.seatsleft = sessioncurrentstatus.seatsleft - 1;                 }             }**             entities.savechanges();             ts.complete();         }         catch (exception ex)         {             ts.dispose();         }     } } 

the problem changes(in statustypeid) sessionparticipant not saved in database sessioncurrentstatus changes !

no error thrown nothing !

edit: have discovered change in sessionparticipant happening in cases except when status changed verified.
ie. when other table viz. sessioncurrentstatus updated in if block.
whenever goes in if block(bold in code) problem takes place.

finally found problem , think because of below code if can explain exact reason:

ems.dal.dalhelper.attachandsavechanges(sessionparticipant, system.data.entitystate.modified); // position of code line can found in below code 

below code called changesstatus method:

protected void ddlstatuses_selectedindexchanged(object sender, eventargs e) {     (int = 0; < gridviewevents.visiblerowcount; i++)     {         if (gridviewevents.selection.isrowselected(i))         {             ems.dal.sessionparticipant sessionparticipant = (ems.dal.sessionparticipant)gridviewevents.getrow(i);             ems.dal.session session = ems.dal.dalhelper.getsessionbyid(sessionparticipant.sessionid);             ems.dal.dalhelper.changestatus(sessionparticipant.sessionid, sessionparticipant.participantid, sessionparticipant.temporaryparticipantid, convert.toint32(ddlstatuses.selecteditem.value));             if (ddlstatuses.selecteditem.value == "2" || ddlstatuses.selecteditem.value == "3") // if accepted or rejected             {                 if (ddlstatuses.selecteditem.value == "2")  // verified/accepted                 {                     ems.dal.dalhelper.sendmail("congratulations! participation " + session.name + " event has been confirmed.", "", sessionparticipant.email, ""); // @ point 'sessionparticipant' did not have changed status set in changestatus method                     sessionparticipant.isnotified = true;                     ems.dal.dalhelper.attachandsavechanges(sessionparticipant, system.data.entitystate.modified);  // culprit per me                      list<ems.dal.sessionattendancelist> attendancelist = ems.dal.dalhelper.getsessionattendancelist(session.id);                     attendancelist.foreach(a =>                     {                         ems.dal.attendancelistdetail attendancelistdetail = a.attendancelistdetails.where(p => p.participantid == sessionparticipant.participantid).firstordefault();                         if (attendancelistdetail == null)                         {                             attendancelistdetail.attendancelistid = a.id;                             attendancelistdetail.participantid = sessionparticipant.participantid.value;                             attendancelistdetail.ispresent = false;                             ems.dal.dalhelper.attachandsavechanges(attendancelistdetail, system.data.entitystate.added);                         }                     });                 }                 else if (ddlstatuses.selecteditem.value == "3") // denied/rejected                 {                     ems.dal.dalhelper.sendmail("your participation " + session.name + " event has been denied.", "", sessionparticipant.email, "");                     sessionparticipant.isnotified = true;                     ems.dal.dalhelper.attachandsavechanges(sessionparticipant, system.data.entitystate.modified);                     list<ems.dal.sessionattendancelist> attendancelist = ems.dal.dalhelper.getsessionattendancelist(session.id);                     attendancelist.foreach(a =>                     {                         ems.dal.attendancelistdetail attendancelistdetail = a.attendancelistdetails.where(p => p.participantid == sessionparticipant.participantid).firstordefault();                         if (attendancelistdetail != null)                         {                             ems.dal.dalhelper.attachandsavechanges(attendancelistdetail, system.data.entitystate.deleted);                         }                     });                 }             }             else             {                 list<ems.dal.sessionattendancelist> attendancelist = ems.dal.dalhelper.getsessionattendancelist(session.id);                 attendancelist.foreach(a =>                 {                     ems.dal.attendancelistdetail attendancelistdetail = a.attendancelistdetails.where(p => p.participantid == sessionparticipant.participantid).firstordefault();                     if (attendancelistdetail != null)                     {                         ems.dal.dalhelper.deleteattendancelistdetail(attendancelistdetail);                     }                 });                 attendancelist.foreach(a =>                 {                     ems.dal.dalhelper.deletesessionattendancelist(a);                 });             }         }     }     gridviewevents.databind();     refreshseats(); } 


Comments

Popular posts from this blog

node.js - Bad Request - node js ajax post -

Why does Ruby on Rails generate add a blank line to the end of a file? -

keyboard - Smiles and long press feature in Android -