使用EF 6.1,我想将外键设置为null(断开两个实体之间的关系),而不首先查询任何一个对象。最好,我也不想提供相关实体的ID(因为这需要将其添加到我的HTML中)。
我当前的代码没有做不必要的查询,但需要相关实体的ID:
public void RemoveCurrentTeacherOfGroup(int groupId, int teacherId)
{
var group = new Group { Id = groupId };
var teacher = new Teacher { Id = teacherId };
group.Teacher = teacher;
_dataContext.Groups.Attach(group);
_dataContext.Teachers.Attach(teacher);
group.Teacher = null;
_dataContext.SaveChanges();
}
但是,我不应该需要teacherId,groupId就足够了。
更多信息:数据库是代码优先生成的。实体的定义如下:
public class Teacher
{
public int Id { get; set; }
..
public virtual List<Group> Groups { get; set; }
}
public class Group
{
public int Id { get; set; }
..
public virtual Teacher Teacher { get; set; }
}
有没有办法在没有teacherId的情况下将外键设置为null?
此外,对于使代码更简洁的答案的许多荣誉,我觉得这些对于像将外键设置为null这样简单的东西来说太多了。
答案 0 :(得分:0)
如果将外键添加到类中,生活通常会容易得多:
public class Group
{
public int Id { get; set; }
public int? TeacherId { get; set; }
public virtual Teacher Teacher { get; set; }
}
然后你的方法是:
public void RemoveCurrentTeacherOfGroup(int groupId)
{
var group = dataContext.Groups.Find(groupId);
if(group == null)
return;
group.TeacherId = null;
_dataContext.SaveChanges();
}
参考文献:
Why does Entity Framework Reinsert Existing Objects into My Database?