我是Entity Framework的新手,所以我需要帮助从实体中删除一个对象。
我有两个表在多对多关系中的表和一个在数据库中连接它们的关联表。在模型中只有两个表,关联一个由导航属性表示,因为这是EF的工作方式。现在我需要通过context.EntityName.DeleteObject(object)
从第一个表中删除一个对象,但是当我尝试这样做时,代码失败并显示错误“DELETE语句与REFERENCE约束FK ...冲突”,这是来自的一个外键。关联表到实体,我尝试删除哪个对象。我想知道如何解决这个问题。你能帮我吗?
以下是表格的样子:
和关联表:
以下是我尝试删除它的方法:
TimetablesEntities context = new TimetablesEntities();
TimetableDetail detail = context.TimetableDetails.SingleOrDefault(td => td.TimetableDetail_ID == timetableDetailId);
context.TimetableDetails.DeleteObject(detail);
context.SaveChanges();
提前致谢!
答案 0 :(得分:5)
您只需清除特定Teachers
的{{1}}列表即可清除关联表。使用你的代码...
TimetableDetail
关键是TimetablesEntities context = new TimetablesEntities();
TimetableDetail detail = context.TimetableDetails.SingleOrDefault(td => td.TimetableDetail_ID == timetableDetailId);
detail.Teachers.Clear();
context.TimetableDetails.DeleteObject(detail);
context.SaveChanges();
答案 1 :(得分:0)
是的,这是一个棘手的问题。
您需要做的是清除EF底层本地存储中的实体。该示例显示了清除特定教师的所有详细信息(甚至只是某些详细信息)时要执行的操作,然后保存该教师的实体。考虑到这一点,这里有一些示例存储库代码:
public void EditTeacher(Teacher teacher)
{
if (teacher == null)
{
throw new ArgumentNullException("teacher");
}
YourDbContext.Entry(teacher).State = EntityState.Modified;
// Remove all timetable details that have an orphaned relationship.
// (E.g., orphaning occurs when 'teacher.TimetableDetails.Clear()'
// is called or when you delete one particular TimetableDetail
// entity for a teacher)
YourDbContext.TimetableDetails
.Local
.Where(td => td.Teacher == null)
.ToList()
.ForEach(td => YourDbContext.TimetableDetails.Remove(td));
YourDbContext.SaveChanges();
}
我希望这会有所帮助。
如需进一步阅读,请查看:使用实体框架删除孤儿。
<子> 修改强> 子>
上面的示例代码假定代码中的其他位置已定义并创建YourDbContext
作为存储库类中的成员变量。我只是想指出它,以防它不清楚。
答案 2 :(得分:0)
你可以这样做: 在删除详细信息之前添加行:
context.Teachers.RemoveRange(detail.Teachers);
关键在于...