簡體   English   中英

實體框架將外鍵更新為null,無需查詢且沒有相關實體的id

[英]Entity framework update foreign key to null without query and without id of the related entity

使用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();
}

但是,我不需要教師ID,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這樣簡單的事情,這些行太多了。

如果將外鍵添加到類中,則生活通常會更輕松:

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();
}

參考文獻:

為什么實體框架將現有對象重新插入到我的數據庫中?

使用缺少的外鍵

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM