c# - Duplicate entries using ASP.NET MVC 4, Entity Framework & SQL Server -


i inherited asp.net mvc 4 app using entity framework , keep getting duplicate records on related tables. haven't been able figure out why happening , happens randomly.

the models such:

  • company -> has many users -> has many userroles
  • userroles references roles table has roleid , name.

it duplicating entries in roles table. have been trying figure out pretty new ef , of that.

userrole.cs partial class:

public static bool updateuserroles(int userid, list<int> roleids)  {         using (var context = new imagetrackerentities())          {             var userroles = context.userroles.where(r => r.userid == userid).tolist();              foreach (var role in userroles)             {                 // not remove users super admin role                 context.entry(role).state = entitystate.deleted;             }              foreach (var id in roleids)              {                 var ur = new userrole() {                     roleid = id,                     userid = userid                 };                  context.entry(ur).state = entitystate.added;             }              context.savechanges();             return true;         }     } 

to notice whats happened more precisely , try activate ef log can see sql generated (if using ef6 (current version of course)). :

using (var context = new blogcontext())  {      //you need add     context.database.log = console.write;       var blog = context.blogs.first(b => b.title == "one unicorn");       blog.posts.first().title = "green eggs , ham";       blog.posts.add(new post { title = "i not them!" });       context.savechanges();  } 

this generate following output:

select top (1)     [extent1].[id] [id],     [extent1].[title] [title]     [dbo].[blogs] [extent1]     (n'one unicorn' = [extent1].[title]) , ([extent1].[title] not null) -- executing @ 7/17/2015 10:55:41 -07:00 -- completed in 4 ms result: sqldatareader 

Comments