• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
路漫漫其修远兮
博客园    首页    新随笔    联系   管理    订阅  订阅

[System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException]: {"对象的当前状态使该操作无效。"}

背景:用Linq to sql 开发系统,两个父子关系的表,例如A表和B表,B表中含有A表的主键A_ID作为B表的外键,如果B表中的A_ID时,使用了如下的写法:

 

MyDataContext db = new MyDataContext();
var b1 
= (from b in db.B where b.ID == 6 select b).Single();
b1.A_ID 
= 5;
db.SubmitChanges();

这样写的话,将会得到以下错误:

 

“/”应用程序中的服务器错误。 
--------------------------------------------------------------------------------

对象的当前状态使该操作无效。 
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.Data.Linq.ForeignKeyReferenceAlreadyHasValueException: 对象的当前状态使该操作无效。

 

原因在于这种写法破坏了ORM的关联结构,应该改写为如下代码:

 

 

MyDataContext db = new MyDataContext();
var b1 
= (from b in db.B where b.ID == 6 select b).Single();
b1.A 
= (from a in db.A where a.ID == 5 select a).Single();
db.SubmitChanges();


参考网址:http://blog.miniasp.com/post/2008/08/Operation-is-not-valid-due-to-the-current-state-of-the-object.aspx

posted @ 2011-03-23 11:25  永生牵恋  阅读(4210)  评论(1)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3