EF中重复操作同一个表的同一条数据时出错。

问题描述

附加类型“penson”的实体失败,因为相同类型的其他实体已具有相同的主键值。在使用"Attach"方法或者将实体的状态设置为"Unchanged"或"Modified"时如果图形中的任何实体具有冲突键值,则可能会发生上述行为。这可能是因为某些实体是新的并且尚未接收数据库生成的键值。在此情况下,使用"Add"方法或者"Added"实体状态跟踪该图形,然后将非新实体的状态相应设置为"Unchanged"或"Modified"。context.Entry<Penson>(item).State=EntityState.Modified;//出错位置。intresult=context.SaveChanges();

请各位大神指点一下。纠结了好半天了。第一次更新数据没有问题。但是第二次更新数据的时候就会出现上述错误。

解决方案

解决方案二:
未设主键造成的?看看表里有没有主键。
解决方案三:
引用1楼wyd1520的回复:

未设主键造成的?看看表里有没有主键。

主键我是真的设置了。。。
解决方案四:
EF有缓存,或者叫做identitymap模式,如果你这个item和它缓存的之前相同主键的对象不是一个,就会错的。一般都是因为多次操作一直在用同一个context导致的,正确的方式是一次操作一个context。
解决方案五:
你设置Modified状态的item是哪里来的?从数据库中查询得到的还是自己new出来的?如果是new出来的,写调用DbContext.Add方法,这样会得到主键
解决方案六:
你是不是用new出来的一个对象进行多次操作才会出现这种问题的?不然按照道理应该不会出现你这种问题的

时间: 2024-08-30 11:09:25

EF中重复操作同一个表的同一条数据时出错。的相关文章

ibatis-Mysql 在A表新增一条数据时,B表的b字段会根据A表的a字段的值增加或减小

问题描述 Mysql 在A表新增一条数据时,B表的b字段会根据A表的a字段的值增加或减小 用ibatis和mysql,用excel导入表格A时, A表有一个字段a每月还款额,B表有一个字段b总金额._两个表根据peopleid关联_. 在A表插入一行新的数据,对应的B表的 某条数据 的字段b总金额发生更新变化. 请问在Action中或sql语句要如何实现这个功能 解决方案 这个用程序来做不是很简单么? 就是在A表插入成功以后执行更新B表的sql语句不就完了么 解决方案二: 在数据库中A表建一个触

select-怎么 同时把数据库中 一个表的多条数据的一个自段修改,

问题描述 怎么 同时把数据库中 一个表的多条数据的一个自段修改, 数据库表 ,student , 字段 stu_id, stu_name,Stu_num,Stu_sex, 表 import , 字段, stu_id, import_id, imp_data, imp_name, 在查出两个表关联信息的时候,怎么把imprt表中的imp_data 字段改为系统当前时间 update import set imp_data =sysdata where stu_id in (select stu_i

SQL中 将同一个表中的A列更新到B列,B列更新到A列

原文:SQL中 将同一个表中的A列更新到B列,B列更新到A列 有网友在SKYPE问及,如标题,SQL中 将同一个表中的A列更新到B列,B列更新到A列. 其实这个不是问题,直接写更新语句即可,可以参考下面动画演示: SQL source code: CREATE TABLE [dbo].[tbl] ( [id] INT, [a] NVARCHAR(10), [b] NVARCHAR(10) ) INSERT INTO [dbo].[tbl] VALUES (1,'123','456') SELEC

oracle数据库中怎么一次性插入10万条数据

问题描述 oracle数据库中怎么一次性插入10万条数据 oracle数据库中怎么一次性插入10万条数据?急用!!!1 解决方案 最快的方法是用imp进行导入 或者用sql执行也可以(insert into )

sql-SQL 表A根据表C的记录新增数据,表C有多少条数据,表A的每条记录就新增多少条不重复的记录

问题描述 SQL 表A根据表C的记录新增数据,表C有多少条数据,表A的每条记录就新增多少条不重复的记录 declare @a table ( id int, [no] varchar(8), name varchar(8) ) declare @c table ( [no] varchar(8) ) insert into @a(id,[no],name)values(1,'A','张三') insert into @a(id,[no],name)values(2,'A','李四') inser

如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写?

问题描述 如何写一个方法用SQL语句查询一张表中有多少条数据,方法改怎么写? 将查询的的返回值为整型 参考用例 类似 以下方法查询政治类新闻人数 新手不知道该如何改动成自己需要的方法 public Map<String, Long> sumPolEntNews(){ //查询政治类新闻人数总和 String sql = "select count(*) from t_user where newsh ='政治类新闻' "; Map<String, Long> m

rdlc-RDLC报表中表达式编写问题-取第二条数据怎么写?

问题描述 RDLC报表中表达式编写问题-取第二条数据怎么写? 在vs的RDLC报表设计中,下面的表达式可以取出并显示出数据集中字段为"波形"的第一条数据 =First(Fields!波形.Value, "DataSet1"), 最后一条可写为: =Last(Fields!波形.Value, "DataSet1"), 如果要取出并显示第二条数据该怎么编写表达式? 如果要取出并显示第n条数据该怎么编写表达式?

用hibernate在修改一条数据时没有覆盖旧的记录,反而添加了一条新纪录,怎么回事?

问题描述 用hibernate在修改一条数据时没有覆盖旧的记录,反而添加了一条新纪录,怎么回事? 我用的是mysql的数据库, jsp <%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE HTML> <div class="fo

向wince平台下sdf数据库查询20000条数据时,采集器死机。

问题描述 最近做一个wince平台资产盘点的程序,下载完资产档案时资产表和盘点表各50000条数据,sdf数据库大小10M左右,向盘点表里查询大量数据时,程序死掉了... 解决方案 解决方案二:查询时一次不要返回的太多解决方案三:wince多大的内存多大的CPU啊.你一次搞这么多数据.这样的数据还是查服务器上的吧.一些基础数据倒可以本地缓存一些.我的博客里有一个tcp的完整的可用于wince的客户端.解决方案四:该回复于2012-04-19 09:31:26被版主删除