使用EntityFramework将数据添加到非常嵌套的子对象

时间:2014-01-31 17:00:25

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

enter image description here

我正在尝试为我的事件对象添加注释。我使用此代码时收到错误

  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。

谢谢

3 个答案:

答案 0 :(得分:0)

根据你的地图,Event实体有一个Note列表作为导航属性,我想你应该添加到这个集合中,你在这一行写的是什么:

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

我认为应该是这样的:

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

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

答案 1 :(得分:0)

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

context.Note.Add(noteToAdd);

答案 2 :(得分:0)

但您的地图显示了NoteEvent之间的一对多关系......

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

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;

没有任何问题,我不确定