我有一张表,比如说STUDENTS,它与另一张桌子CLASSES有一对一的关系。我创建了一个ASP.Net表单来接收新学生的输入,包括从组合框中选择一个类。这是一个小型但多层的应用程序,我已经开始使用实体框架。所以EF为这两个表生成了类。在提交时,我正在构建一个STUDENT对象并将其交给我的数据控制器进行插入,更新等。
在STUDENTS表中,我有一个CLASSID,它是CLASSES表的FK。回到白天,当我将插入到STUDENTS时,我将从组合框中取出SelectedValue并将其粘贴到ClassId字段中。但是,对于EF,STUDENT对象没有此ID字段。相反,它有一个CLASS字段,它是该类的完整实例。构建新的STUDENT对象时,该CLASS字段为空。我想用用户在组合中选择的类来填充它。
我不能把它留空,我不能把ID放在那里。我尝试检索该类记录并使用它,但是我得到一个错误,我无法使用具有两个不同上下文的相同对象。我真的应该在这做什么?
答案 0 :(得分:2)
您可以设置ClassReference的EntityKey属性:
Student.ClassReference.EntityKey = new EntityKey("myModel.ClassSet", "ID", classId);
修改强>
这是如何添加学生(我现在无法检查,但它应该有效):
newStudent.BClassReference.EntityKey = new EntityKey("FormsEntities.BClasses", "BClassId", 13);
FormsEntities fe = new FormsEntities();
fe.AddToStudents(newStudent);
fe.SaveChanges();
答案 1 :(得分:2)
如何以简单的方式开始做事?
using (var fe = new FormsEntities())
{
newStudent.BClass = fe.BClasses.Where(bc => bc.BClassId == 13).First();
fe.AddToStudents(newStudent);
fe.SaveChanges();
}
在基本功能正常工作之前,不要乱用EntityKey
。我认为“优化”保存主要是浪费时间。