c# - Everytime I save entity framework is leaving old data and creating new for ICollection property of a model -
please guide me how can save , update data database without creating copy of row. whenever save it's create new record instead update current one. so, question is, there wrong in model creation or relation between model here’s models
public class order { public guid id { get; set; } public string number { get; set; } public string fromloc { get; set; } public string toloc { get; set; } public division devision { get; set; } = division.none; public datetime orderdate { get; set; } = datetime.now; public orderpriority priority { get; set; } = orderpriority.none; public bool issubmitted { get; set; } public otherfield others { get; set; } public icollection<orderdetails> details { get; set; } //problem here } public class orderdetails { public int id { get; set; } public string productcode { get; set; } public int whstock { get; set; } public int branchstock { get; set; } public int quantity { get; set; } } i using fluent api model configuration here’s config code
public class orderconfig : entitytypeconfiguration<order> { public orderconfig() { totable("tblorderhead"); haskey(k=>new { k.id,k.number}); property(p=>p.fromloc).isrequired(); property(p=>p.toloc).isrequired(); hasmany(m => m.details); } } and save function
private async void save() { otherfield comfield = new otherfield { createby = frmwelcome._user.username, updateby = frmwelcome._user.username }; var orderdetails = new list<orderdetails>(); task<order> taskfindorder = new task<order>(()=> { //details foreach (orderdetailsviewmodel item in orderdetailsviewmodelbindingsource) { orderdetails details = new orderdetails { productcode = item.prodcode, branchstock = item.brstk, whstock = item.whstk, quantity = item.quantity }; orderdetails.add(details); } return con.orders.firstordefaultasync(x => x.number == txtordernumber.text).result; ; }); taskfindorder.start(); var find = await taskfindorder; if (find != null) { //run update find.details.clear(); find.details = orderdetails; find.others.updateby = frmwelcome._user.username; find.others.updatetimestamp = datetime.now; } else { var order = new order { id = guid.newguid(), fromloc = frmwelcome._locationcode, toloc="", number = txtordernumber.text, others = comfield, details=orderdetails }; con.orders.add(order); } try { var result = await con.savechangesasync(); if (result != 0) { new msg("successfull", "record saved.", msg.msgtype.success); } else { new msg("failed!", "record failed save database.", msg.msgtype.warning); } } catch (exception ex) { new msg("error!", ex.message, msg.msgtype.error); } } and when save it's ok when it's run update
this result after save, please see result too
i don't know correct way or not time being resolve issue. have idea please share me did below
private async void save() { otherfield comfield = new otherfield { createby = frmwelcome._user.username, updateby = frmwelcome._user.username }; var orderdetails = new list<orderdetails>(); task<order> taskfindorder = new task<order>(()=> { //details foreach (orderdetailsviewmodel item in orderdetailsviewmodelbindingsource) { orderdetails details = new orderdetails { productcode = item.prodcode, branchstock = item.brstk, whstock = item.whstk, quantity = item.quantity }; orderdetails.add(details); } return con.orders.firstordefaultasync(x => x.number == txtordernumber.text).result; ; }); taskfindorder.start(); var find = await taskfindorder; if (find != null) { //run update var del = find.details; //get previous details con.orderdetails.removerange(del); //addedd line here delete find.details = orderdetails; //assign new value find.others.updateby = frmwelcome._user.username; find.others.updatetimestamp = datetime.now; } else { var order = new order { id = guid.newguid(), fromloc = frmwelcome._locationcode, toloc="", number = txtordernumber.text, others = comfield, details=orderdetails }; con.orders.add(order); } try { var result = await con.savechangesasync(); if (result != 0) { new msg("successfull", "record saved.", msg.msgtype.success); } else { new msg("failed!", "record failed save database.", msg.msgtype.warning); } } catch (exception ex) { new msg("error!", ex.message, msg.msgtype.error); } } it's working still not satisfied approach there's must automate approach entity framework

Comments
Post a Comment