在使用Entity Framework时,删除某个表的一条记录然后又增加相同记录时,报错

ls176 2010-01-24 06:44:02
例如:User 表;主键 ID
test.TestContext ct = new test.TestContext();
var r = ct.User.Where( p => p.ID == "test" ).First();
ct.DeleteObject( r );
test.User user = new test.User();
user.ID = "test";
ct.AddToUser( user );
ct.SaveChanges();

在保存时,我查了下执行顺序,竟然是先执行Add然后再执行Delete,这样就导致Add时主键冲突。
按道理这种应用应该是比较常见的是使用方式,但我怎么想不明白为什么会先Add,EF直接按状态的修改先后顺序执行就是的了,偏偏还要自己按某个顺序来执行。

又或者EF中有某个方法可以让我定义执行的方式,望知道的人说下。
...全文
242 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaogug01 2010-01-27
  • 打赏
  • 举报
回复
问题有点意思 期待,, 帮顶
ls176 2010-01-27
  • 打赏
  • 举报
回复
再顶一下
ls176 2010-01-25
  • 打赏
  • 举报
回复
顶一下
fkfish 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ls176 的回复:]
在实际应用中,楼上标记红字的部分实际上是被隐藏到底层了。不可能为每一个方法都写这么多的语句。
我关注点在于,先删后增加这种常见更新模式为什么会在EF中难以实现。是不是还有别的方式来实现我面对的这个问题
[/Quote]
存储过程~

个人有个思路- -很囧
自己用事件封装好,进去后自动实例化test.TestContext,用一个参数来判断是否打开事务,方法执行完毕,最后提交事务
ls176 2010-01-24
  • 打赏
  • 举报
回复
在实际应用中,楼上标记红字的部分实际上是被隐藏到底层了。不可能为每一个方法都写这么多的语句。
我关注点在于,先删后增加这种常见更新模式为什么会在EF中难以实现。是不是还有别的方式来实现我面对的这个问题
AngleBabyHong 2010-01-24
  • 打赏
  • 举报
回复
学习
fkfish 2010-01-24
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ls176 的回复:]
开始举的例子只是简单说明下问题产生的场景。
在如下场景中,为某角色分配权限,我的做法是先删除掉该角色原有权限,然后再添加新的权限。这要求在一个事务中完成。

[/Quote]
那为什么不直接吧该角色原有权限给更新就可以了?

System.Data.Common.DbTransaction tran = null;
test.TestContext ct = new test.TestContext();
ct.Connection.Open();
tran = ct.Connection.BeginTransaction();
var r = ct.User.Where( p => p.ID == "test" ).First();
ct.DeleteObject( r );
ct.SaveChanges();
test.User user = new test.User();
user.ID = "test";
ct.AddToUser( user );
ct.SaveChanges();
tran.Commit();
ls176 2010-01-24
  • 打赏
  • 举报
回复
开始举的例子只是简单说明下问题产生的场景。
在如下场景中,为某角色分配权限,我的做法是先删除掉该角色原有权限,然后再添加新的权限。这要求在一个事务中完成。
tzs2304 2010-01-24
  • 打赏
  • 举报
回复
up
wuyq11 2010-01-24
  • 打赏
  • 举报
回复
entities.DeleteObject(r);
entities.SaveChanges();
fkfish 2010-01-24
  • 打赏
  • 举报
回复
test.TestContext ct = new test.TestContext();
var r = ct.User.Where( p => p.ID == "test" ).First();
ct.DeleteObject( r );
ct.SaveChanges();
test.User user = new test.User();
user.ID = "test";
ct.AddToUser( user );
ct.SaveChanges();

加了红色这句呢?
  • 打赏
  • 举报
回复
Entity Framework是什么?
没用过,帮顶

110,552

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧