一例附加类型“LMSoft.FrameWork.Identity.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值错误的解决
来源:互联网 发布:淘宝店铺优惠券在哪里 编辑:程序博客网 时间:2024/05/17 20:32
在使用Microsoft.AspNet.Identity做会员开发时有一个批量修改会员信息的功能。在做的时候出现这样的错误:
附加类型“LMSoft.FrameWork.Identity.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用 "Attach" 方法或者将实体的状态设置为 "Unchanged" 或 "Modified" 时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用 "Add" 方法或者 "Added" 实体状态跟踪该图形,然后将非新实体的状态相应设置为 "Unchanged" 或 "Modified"。
查了许多资料,并不明白问题出在哪里,又比较了下单独修改一个会员信息的存储程序代码和批量生成的程序代码,也没找到错误的原因。
最后找到一篇博文,博文很长,最后得出的结论是:出现异常的原因,可能是UserManager、RoleManager使用了不同的数据库上下文
我的修改会员信息没有用到RoleManager,但是用到了UserManager.难道是查询的会员信息的语句和更新语句数据库上下文不同?于是进行检查:
查询会员信息语句:
var user = UserManager.FindByIID(i);
这个FindByIID是自定义的一个方法,通过自动增加的IID字段来获取applicationuser对象。这个方法使用的数据库上下文是:
private readonly IdentityDbContext _db = new IdentityDbContext();
这个是自定义的。获取的user对象赋了新值后使用的是updateasync方法。
var result= await UserManager.UpdateAsync(user);
UpdateAsync此方法是vs内置的方法,使用的数据库上下文肯定不是我这个。于是我查了下我修改单个会员信息所使用的查询代码:
var user = UserManager.FindById(model.GID);
这个FindById也是内置的方法。难怪我单独修改会员的页面没有问题,是因为其查询语句和更新语句使用的是同一个数据库上下文。于是我进行修改我的查询语句为下面的代码:
var user = UserManager.Users.FirstOrDefault(m => m.IID == i);
编译运行,这次没问题了。看来问题就是出在这里。被附加修改的数据实体必须和更新语句使用同一个数据库连接,否则就会出问题。
- 一例附加类型“LMSoft.FrameWork.Identity.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值错误的解决
- EF操作两个有相同ID的实体报错:附加类型“...”的实体失败
- 将实体转换成具有相同结构的DataTable
- Page_Load具有相同参数类型的成员
- 相同实体字段的赋值
- VS2012Error:不能将“bool”类型的值分配到“FILE*”类型的实体—已解决
- 已添加了具有相同键的项 的错误
- springmvc: bindException 的single-type-import已定义具有相同简名的类型
- 相同的类型
- C# 匿名类型 对象 转换成 其他 匿名类对象(具有 相同特性值 的 属性 之间的赋值)
- 【牛腩】二义性与具有相同类型的成员一起来找茬
- 具有相同的名称
- 具有相同的身体
- 无法安装此应用程序,因为已安装具有相同标识的应用程序
- VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序
- 无法安装此应用程序,因为已安装具有相同标识的应用程序
- VSTO:无法安装此应用程序,因为已安装具有相同标识的应用程序
- Hibernate实体关系映射——主键相同的一对一关系
- angularjs用repeat生成子model的方法
- centos 环境安装 及 thrift安装
- VMware vSphere Client管理下虚拟机的硬盘扩容
- Linux常用命令
- Android 7.0 升级安装适配
- 一例附加类型“LMSoft.FrameWork.Identity.ApplicationUser”的实体失败,因为相同类型的其他实体已具有相同的主键值错误的解决
- git clone,push,pull,fetch命令详解
- codeforce 3A
- 二维码工具类
- 如何使用GOOGLE高级搜索技巧
- 重装系统总失败?是否踩了UEFI+Legacy这颗雷?
- DSD: Regularizing Deep Neural Networks with Dense-Sparse-Dense 解析与实验
- 第18篇.linux系统安装
- RedHat6.5找回root用户密码