C# 实体框架将外键更新为null,无需查询且无相关实体的id
使用EF 6.1,我想将外键设置为null(断开两个实体之间的关系),而不首先查询任何一个对象。最好,我也不想提供相关实体的id(因为这需要将其添加到我的HTML中) 我的当前代码不执行不必要的查询,但需要相关实体的id:C# 实体框架将外键更新为null,无需查询且无相关实体的id,c#,entity-framework,foreign-keys,entity-framework-6.1,C#,Entity Framework,Foreign Keys,Entity Framework 6.1,使用EF 6.1,我想将外键设置为null(断开两个实体之间的关系),而不首先查询任何一个对象。最好,我也不想提供相关实体的id(因为这需要将其添加到我的HTML中) 我的当前代码不执行不必要的查询,但需要相关实体的id: public void RemoveCurrentTeacherOfGroup(int groupId, int teacherId) { var group = new Group { Id = groupId }; var teacher = new Te
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; }
}
公共课堂教师
{
公共int Id{get;set;}
..
公共虚拟列表组{get;set;}
}
公共课组
{
公共int Id{get;set;}
..
公共虚拟教师{get;set;}
}
有没有办法在没有teacherId的情况下将外键设置为null
另外,对于一个让代码不那么冗长的答案,我也很高兴,我觉得对于像将外键设置为null这样简单的事情来说,这些行太多了。如果将外键添加到类中,生活通常会简单得多:
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();
}
参考资料:
很抱歉,无法将此标记为答案,因为Find(groupId)将执行额外的查询(除非缓存dataContext,这将使体系结构复杂化并产生许多可能的问题)。如果没有将
教师
附加到数据库上下文
,则您希望从组中删除教师
?您想使用实体框架吗?我想这样做是的,最好使用EF。然而,“EF不可能”可能是答案,我不知道是否可能