OracleODP.Net和EFCodeFirst-SaveChanges错误有人可以帮我解决这个问题吗:Code:Roler=newRole{ID=1,Name="成员"};ctx.Roles.Attach(r);//保存用户Useru=newUser{Login=login,Password=password,Status=1};u.Roles.Add(r);ctx.Users.Add(u);ctx.SaveChanges();我想要做的是保存一个具有现有角色的新用户。用户和角色类具有由fluent-api映射的多对多关系,如下所示:modelBuilder.Entity().HasMany(u=>u.Roles).WithMany(r=>r.Users).Map(x=>{x.ToTable("USER_ROLE_XREF",dbsch);x.MapLeftKey("ID_USER");x.MapRightKey("ID_ROLE");});但是当调用SaveChanges时,我得到这个错误:{"ThespecifiedValueisnotaninstanceoftype'Edm.Decimal'rnParametername:value"}实际上,我总是尝试通过单个SaveChanges()调用保存相关实体我得到同样的错误。所以,我所要做的就是打多个电话,所以一切正常:Roler=newRole{ID=1,Name="Members"};ctx.Roles.Attach(r);//保存用户Useru=newUser{Login=login,Password=password,Status=1};ctx.Users.Add(u);ctx.SaveChanges();//分配成员角色u.Roles.Add(r);ctx.SaveChanges();我的理解是EF支持通过单个SaveChanges调用保存多个更改,所以我想知道这里出了什么问题。使用Attach()方法的想法是你有一个已知在数据库中但未被此上下文跟踪的实体,对吗?我的问题是你确定角色在这里:Roler=newRole{ID=1,Name="Members"};已经存在的东西?如果没有,我不认为你想做的是使用ctx.Roles.Attach(r);相反,你写:ctx.Roles.Add(r);然后你可以转过来写Useru=newUser{Login=login,Password=password,Status=1,};ctx.Users.Add(u);u.Roles.Add(r);ctx.SaveChanges();你的第一个例子的问题是这个新角色对数据库没有影响是新的,所以追加它不是你想要做的,而是你想添加它。ctx.SaveChanges()应该可以正常工作。以上就是C#学习教程的全部内容:OracleODP.NetandEFCodeFirst–SaveChanges错误分享。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
