【问题标题】:Adding Data to a very nested child object using EntityFramework使用 EntityFramework 将数据添加到非常嵌套的子对象
【发布时间】:2014-01-31 17:00:25
【问题描述】:

我正在尝试向我的事件对象添加注释。使用此代码时出现错误

  Note noteToAdd = new Note { State = State.Added, NoteText = note };
  Patient patient = context.Patients.Find(patientId);
  patient.State = State.Modified;
  patient.MobilePatient.State = State.Modified;
  patient.MobilePatient.MCalmEvents.Find(e => e.Id == eventid).Note = noteToAdd;
  context.ApplyStateChanges();

有没有更好的方法来使用 Linq To Entity?

我遇到的错误是:

{"无效的列名'Note_Id'。"}

并且正在生成的 SQl 是 SELECT 而不是 INSERT。

谢谢

【问题讨论】:

  • 错误是什么?编译或运行时错误?错误消息文本是什么?
  • 当我看到一个问题说有错误但没有说明错误是什么时,我会在 9 次中有 9 次投票关闭,因为“缺乏足够的信息来诊断问题”。除非你'正在使用 Apple II,错误消息实际上说不仅仅是“错误”,他们这样做是有原因的:这些信息对诊断问题很有用。
  • 我遇到的错误是:{"Invalid column name 'Note_Id'."} 并且正在生成的 SQl 是一个 SELECT 和 Insert。
  • 谢谢。投票重新开放。

标签: entity-framework linq-to-entities add


【解决方案1】:

但您的地图显示Note 和Event 之间存在一对多关系...

您的所有代码都保持原样,但不是这一行:

patient.MobilePatient.MCalmEvents.Find(e => e.Id == eventid).Note = noteToAdd;

替换这些行:

noteToAdd.EventID = oEvent.ID; // replace field names, to exactly what they are; 
context.Note.Add(noteToAdd);
var oEvent = patient.MobilePatient.MCalmEvents.Find(e => e.Id == eventid);
oEvent.NoteID = noteToAdd.ID; // replace field names, to exactly what they are;    

我想如果你不写这两个:

var oEvent = patient.MobilePatient.MCalmEvents.Find(e => e.Id == eventid);
oEvent.NoteID = noteToAdd.ID; // replace field names, to exactly what they are;

没有问题,我不确定

【讨论】:

  • 感谢@am1r_5h 的帮助,当我重新检查代码时,问题出在具有名为 Notes 的 Note 表的数据库表中。我再次生成数据库,第一个代码正常工作。我还检查了您的解决方案,它也可以使用,谢谢
  • 还有问题吗?你为什么取消选中这篇文章作为真实答案?
  • 很抱歉,我意识到我没有将问题标记为已解决,试图增加分数
  • 我以为你的问题还没有解决...谢谢,但没有必要欺骗 ;)
  • 您使用entityframework,您能回答我的问题吗? what are edmfunctions for
【解决方案2】:

根据您的地图,Event 实体有一个 Note 列表作为导航属性,我认为您应该将您在此行中写入的内容添加到此集合中:

patient.MobilePatient.MCalmEvents.Find(e => e.Id == eventid).Note = noteToAdd;

我觉得应该是这样的:

patient.MobilePatient.MCalmEvents.Find(e => e.Id == eventid).Add(noteToAdd);

另外,你得到什么样的错误?你能解释一下你的错误吗?

【讨论】:

  • 谢谢。您的提案解决方案是一些东西,但 MCalmEvent 中不存在 Add 方法。我遇到的错误是:{"Invalid column name 'Note_Id'."} 并且正在生成的 SQl 是一个 SELECT 而不是 Insert。
  • 架构是 MobilePatient 有一个 Event=MCalmEvents 列表,每个事件只有一个注释。
  • 但是您的地图显示了Note 和Event 之间的一对多关系
【解决方案3】:

确定Event 导航属性上没有添加方法 为什么不尝试直接从上下文添加注释?喜欢:

context.Note.Add(noteToAdd);

【讨论】:

  • 是的,如果我尝试使用 Add,我肯定会遇到错误。如果我执行 context.Note.Add 我将如何指定患者和具有该注释的特定事件?
猜你喜欢
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2022-12-10
相关资源
最近更新 更多