c# - "An entity object cannot be referenced by multiple instances of IEntityChangeTracker" when adding a entity to context -
i coding mvc app contains couple of many-to-many associations. 1 of them custom role <---> account association. have table full of pre-defined roles user can choose. created viewmodel holds entity model , few collections use, 1 of them roles collection. populate create form these values , resolve them again on [httppost] create action.
here relevant code:
viewmodel class:
public class accountsviewmodel { public accounts account { get; set; } public list<roles> roleslist { get; set; } } controller code:
public actionresult create() { accountsviewmodel viewmodel = new accountsviewmodel(); viewmodel.roleslist = rolesservice.getallroles(); return view(viewmodel); } [httppost] [validateantiforgerytoken] public actionresult create(accountsviewmodel viewmodel) { if (modelstate.isvalid) { foreach(roles role in viewmodel.roleslist) { if (role.isselected) { roles selectedrole = rolesservice.getrole(role.id); viewmodel.account.roles.add(selectedrole); } } //some more code here... accountsservice.addaccount(viewmodel.account); } } custom service class (accountsservice)
public void addaccount(accounts newaccount) { //appdatacontext instance of <model>container appdatacontext.accountsset.add(newaccount); appdatacontext.savechanges(); } and create view:
<div class="form-group"> @html.labelfor(model => model.account.roles, htmlattributes: new { @class = "control-label col-md-2" }) <div class="col-md-10"> @for (int = 0; < model.roleslist.count; i++) { @html.hiddenfor(m => m.roleslist[i].id) @html.checkboxfor(m => m.roleslist[i].isselected) @html.labelfor(m => m.roleslist[i].isselected, model.roleslist[i].name) <br /> } </div> </div> now actual problem, each time try add new accounts object, error "an entity object cannot referenced multiple instances of ientitychangetracker." have looked @ few posts found on internet, can't associate them possible errors made in code. can me out here?
the problem roles of newaccount still attached context of roleservice. entity can attached 1 context @ time.
you can either call context.entity(...).detach() detach entity, or better role change tracking disabled , without proxy creation, give huge speed boost to:
context.configuration.autodetectchangesenabled = false; context.configuration.proxycreationenabled = false; even better create new context within using block inside of rolesservice.getrole(...) way context won't polluted (and slow) on time.
Comments
Post a Comment