实体框架外键错误与插入

希望德本托卢

我们有一个使用Entity FrameWork的MVC项目,其中有三个表,一个类表,一个学生表和一个教师表。教师和学生表通过CLASS_ID与班级表有关系。我们正在尝试制作一个课程的副本,并将其连同其老师和学生一起插入数据库。

public void MakeClassCopy(int classID){

    var copiedClass = database.TABLE_CLASS.Where(x => x.ID == classID).First();

    var students = copiedClass.TABLE_STUDENTS.ToList(); //Lines that cause the exception
    var teachers = copiedClass.TABLE_TEACHERS.ToList(); //Lines that cause the exception

    database.TABLE_CLASS.Add(copiedClass);
    database.SaveChanges(); 
    string newTableID = copiedClass.ID;

    //Insert students and teachers with new CLASS_ID here

}

如果我们省略有问题的行,则此方法有效,但是当像这样执行时,我们会收到一个运行时异常提示

"The changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: A referential integrity constraint violation occurred: The property value(s) of 'TABLE_CLASS.ID' on one end of a relationship do not match the property value(s) of 'TABLE_STUDENTS.CLASS_ID' on the other end."

为什么仅通过定义两个变量才能得到此错误?我们甚至不在其他任何代码中使用它们。

Eeckhaut团队

通过选择“ copiedClass”的学生和老师,您实际上是在将class_id为“ classId”的班级的学生选择到数据库上下文中。这些对象保留在内存中。
接下来,您可能会更改这些对象的class_id,并将它们插入数据库中。在插入操作完成并且缓存尝试更新之前,一切都很好。该缓存引用了所有这些获取的对象,但是具有不同的class_id。
现在,您使用ToList获取的学生已链接到另一个班级,并且与上下文不一致。

复制对象时,有2个干净的选项:
1.创建新对象,复制先前对象的属性并插入它们,
或者
2.使用第一个上下文获取对象,并使用第二个上下文插入新对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

实体框架外键插入重复键

来自分类Dev

实体框架的外键

来自分类Dev

SQLBulkCopy插入使用带有外键对象的实体框架

来自分类Dev

实体框架播种导致插入语句与外键冲突

来自分类Dev

为什么实体框架要寻找错误的外键列?

来自分类Dev

实体框架-外键约束

来自分类Dev

实体框架错误删除具有外键关系的实体

来自分类Dev

实体框架错误删除具有外键关系的实体

来自分类Dev

实体框架插入错误的数据?

来自分类Dev

实体框架6更新表并将其插入与外键相关的表中

来自分类Dev

外键实体框架6在相关表中插入了null

来自分类Dev

使用实体框架将不同的记录插入带有外键的表中

来自分类Dev

实体框架使用HasOptional加载外键

来自分类Dev

实体框架映射。多个外键

来自分类Dev

实体框架6.1.2中的外键

来自分类Dev

代码优先实体框架和外键

来自分类Dev

实体框架中的两列外键

来自分类Dev

实体框架6添加外键

来自分类Dev

实体框架自动外键填充

来自分类Dev

实体框架不会更新外键对象

来自分类Dev

C#实体框架中的外键

来自分类Dev

如何验证IList外键?实体框架

来自分类Dev

实体框架核心外键默认约定

来自分类Dev

实体框架-代码优先-外键约束

来自分类Dev

实体框架,不需要的外键

来自分类Dev

实体框架6-外键问题

来自分类Dev

代码优先实体框架中的外键

来自分类Dev

实体框架6无法创建外键

来自分类Dev

实体框架外键数据注释