Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架将外键更新为null,无需查询且无相关实体的id_C#_Entity Framework_Foreign Keys_Entity Framework 6.1 - Fatal编程技术网

C# 实体框架将外键更新为null,无需查询且无相关实体的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

使用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; }
}
公共课堂教师
{
公共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不可能”可能是答案,我不知道是否可能