实体框架:LINQ to Entities赋值的不同ObjectContext对象错误

时间:2010-08-19 19:38:20

标签: c# entity-framework linq-to-entities

我不断收到以下InvalidOperationException

  

无法定义两个对象之间的关系,因为   它们附加到不同的ObjectContext对象。

尝试执行以下代码时:

newCorr.ReqCode = (from req in context.ReqCodeSet
                   where req.Code.Equals(requirement.Code)
                   select req).FirstOrDefault();

就在这一行之前,我正在做以下事情:

 foreach (Requirement requirement in myInformation.Reqs)
 {
     MyHwReqCorr newCorr = new MyHwReqCorr();

     newCorr.HwItem = Dictionaries.Instance.HwIdHwRecordDictionary[requirement.Id];

所以我正在做的是解析我的Information.Reqs列表,创建一个MyHwReqCorr的新实例,将HwItem设置为之前存储在字典中的项目,然后使用LINQ to SQL命令设置ReqCode,该命令在表中查找与我传入的req代码匹配的req代码。任何帮助将不胜感激。您需要的任何信息,我很乐意提供。

编辑:就在我调用这个foreach之前,我可以调用它(作为测试来验证我可以访问数据库):

List<ReqCode> reqCodeList = (from req in context.ReqCodeSet select req).ToList();

我从来没有犯过任何错误。但是当我尝试在该列表中设置一个项目时(使用where扩展方法,如:

newCorr.ReqCode = reqCodeList.Where(t=>t.Code == requirement.Code).FirstOrDefault();

或使用与newCorr.HwItem类似的字典,我得到了主要错误。

EDIT2:我也注意到一些奇怪的事情:当我最初运行时,使用任何设置(我的原始或变量方法或Rony发布的方法),它都有效。但任何后续运行,意味着如果我停止调试并再次开始调试,它会因该错误而失败。只有当我杀死excel的所有实例(在后台运行生成日志以便稍后查看)并等待大约2-3分钟时,它是否再次起作用然后遵循与以前相同的情况...第一次通过,随后很快失败。

EDIT3:它绝对不是Excel相关的,因为我阻止Excel启动,我仍然得到该错误。但我确实注意到,如果我等待一段时间,再试一次,它有效....有时候。

2 个答案:

答案 0 :(得分:1)

您是否检索同一线程/上下文中的所有项目?尝试在同一个帖子上检索项目。

答案 1 :(得分:-1)

newCorr.ReqCode = (from req in context.ReqCodeSet
                   where req.Code equals requirement.Code
                   select req).FirstOrDefault();

OR

newCorr.ReqCode = context.ReqCodeSet
                        Where( r => r.Code == requirement.Code)
                        .FirstOrDefault();