无法更新实体框架6中的外键

foo*_*110 6 c# entity-framework foreign-keys entity-framework-6.1

我正在尝试对外键进行简单更新,但脚本永远不会被发送过来.

这是我正在使用的代码:

using (var db = new MyContext())
{
      db.Entry<Contact>(newContact).State = EntityState.Modified;
      newContact.ContactOwner = db.Person.Find(3);
      db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

EF6更新Persons表中的其余列,但它不更新Persons表中的Contact_Id.

人物实体:

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Contact> ContactList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

联系实体:

public class Contact
{
    public int Id { get; set; }
    public string Email { get; set; }
    public string TelNo { get; set; }
    public Person ContactOwner { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?

请帮忙!

Yul*_*dra 8

由于您正在与独立协会合作.你也可以

  • 添加和删​​除关系ContactList,但您需要从两者中检索Person.

    db.Entry(newContact).State = EntityState.Modified;
    
    var p1 = db.Set<Person>().Include(p => p.ContactList)
        .FirstOrDefault(p =>p.Id == 1);
    p1.ContactList.Remove(newContact);
    
    var p3 = db.Set<Person>().Include(p => p.ContactList)
        .FirstOrDefault(p => p.Id == 3);
    p3.ContactList.Add(newContact);
    
    db.SaveChanges();
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者您可以使用断开连接的对象,但您需要手动管理关系.

    db.Entry(newContact).State = EntityState.Modified;
    
    var p1 = new Person { Id = 1 };
    db.Entry(p1).State = EntityState.Unchanged;
    var p3 = new Person { Id = 3 };
    db.Entry(p3).State = EntityState.Unchanged;
    
    var manager = ((IObjectContextAdapter)db).ObjectContext.ObjectStateManager;
    manager.ChangeRelationshipState(newContact, p1, item => item.ContactOwner,
         EntityState.Deleted);
    manager.ChangeRelationshipState(newContact, p3, item => item.ContactOwner,
         EntityState.Added);
    
    db.SaveChanges();
    
    Run Code Online (Sandbox Code Playgroud)

PS

您可能需要重新考虑添加外键值,以使一切更容易,只需提及Id即可更新外键.

有关更多信息,请参阅此帖子.