循环插入数据时遇到的问题
我的程序使用的是Entity Framework逻辑大致是这样的:
1、从一个集合开始循环
2、检查主键是否存在重复
3、如果不重复则插入新数据,如果重复则修改已有的数据
4、应用修改并保存(SaveChnges()方法)
5、循环结束
现在出现的问题是,当存在两条主键相同的数据时,步骤2的判断结果总是为“否”,进而造成步骤4的时候主键冲突, --------------------编程问答-------------------- 做法不对吧,
应该是判断集合中是否存在该对象,
如果存在则更新,
不存在则插入。 --------------------编程问答-------------------- 判断错误应该是判断方法不对,
如果是字符型的比较,
最好用string1.equals(string2),
不要用双等号,
并且注意,
应该把肯定不为空的字段放在前面,
有可能为空的放在括号里。 --------------------编程问答-------------------- 贴出你的代码来看看
list.Any() --------------------编程问答-------------------- 像你这种情况最好不要进行对象的比较,我估计如果进行对象比较的话可能根本就找不到完全相同的两个对象。
因为两个实体对象的数据相同,并不表示两个对象就是相等的。
你的这个问题关键点在于判断主键是否已经存在,根据你对问题的描述,也正是在这个地方出现了错误。
我的做法是这样的:
首先把已经存在的主键保存到一个集合中,只要保存主键的值就可以了,实体类对象的其他数据可以不用保存。
然后你再把要添加,或者将要更新的对象的主键拿出来,在前面保存的主键集合中去查找,是否存在。
如果存在,就执行更新操作;不存在,则执行添加操作。
这样做的话,应该就能解决问题吧! --------------------编程问答-------------------- --------------------编程问答-------------------- 首先保证原始数据中,不存在重复主键的字段,否则一切操作还是会出错. --------------------编程问答-------------------- 1. 数据库存在两条主键相同的数据,并不影响你的重复主键的判断.
2. 新增数据,根本不受影响。
3. 修改数据时, 应该是主键当Where条件的,也就是两条主键相同的数据都修改. --------------------编程问答-------------------- 判断的处理不是很好,应当好好看看你的逻辑了。是不是不合理啊! --------------------编程问答-------------------- 代码帖出来啊!
补充:.NET技术 , LINQ