c# - Deleting a row using entity framework -
i'm trying delete row table in database keep getting null reference exception.
i know code wrote isn't grabbing id number combobox don't know how fix it.
here's code have:
private void btndelete_click(object sender, routedeventargs e) { try { //select row delete doctor del = ((doctor)cbdocidd.selecteditem); doctor deleted = (from d in mainwindow.nlh.doctors d.doctorid == del.doctorid select d).first(); //delete row db mainwindow.nlh.doctors.deleteobject(deleted); //save database mainwindow.nlh.savechanges(); messagebox.show("doctor deleted"); this.close(); } catch (exception ex) { messagebox.show(ex.message); } } any appreciated.
this code used fill combobox:
private void window_loaded(object sender, routedeventargs e) { cbdocidd.datacontext = mainwindow.nlh.doctors; }
you need use .firstordefault , check whether valid entity has been found:
//select row delete doctor del = ((doctor)cbdocidd.selecteditem); doctor deleted = (from d in mainwindow.nlh.doctors d.doctorid == del.doctorid select d).firstordefault(); // check if exists!! if(deleted != null) { //delete row db mainwindow.nlh.doctors.deleteobject(deleted); //save database mainwindow.nlh.savechanges(); messagebox.show("doctor deleted"); this.close(); } if use .first() , doctor given id doesn't exist, you'll exception
also: make sure del value ok , not null before using in following statement. same goes mainwindow - sure not null ??
update: can try these 2 lines , tell me result is??
//select row delete object selectedobj = cbdocidd.selecteditem; if(selectedobj != null) { string typeofselectedobj = selectedobj.gettype().name; } doctor del = ((doctor)cbdocidd.selecteditem); is selectedobj other null?? , if so: type it??
update #2: ok - doctor exist , being returned ok - can try me??
replace line:
doctor del = ((doctor)cbdocidd.selecteditem); with instead:
doctor del = cbdocidd.selecteditem doctor; when run - del other null ?
solution:
in end, real reason why code broke lies in fact call mainwindow.nlh.doctors.deleteobject(deleted); caused event handler fire, included code:
private void cbdocidd_selectionchanged(object sender, selectionchangedeventargs e) { // populate doctorid db doctor deleteddoc = ((doctor)cbdocidd.selecteditem); tblastname.text = deleteddoc.lastname.tostring(); tbfirstname.text = deleteddoc.firstname.tostring(); tblicensenumber.text = deleteddoc.licensenumber.tostring(); } but in situation, when doctor being deleted, deleteddoc returned null, no check in place ensure access non-null object ..... therefore, infamous "null-reference exception" thrown when trying access deleteddoc.lastname property...
Comments
Post a Comment