I am trying to do a simple update to the foreign key but the script never get sent over.
Here is the code I am using:
using (var db = new MyContext())
{
db.Entry<Contact>(newContact).State = EntityState.Modified;
newContact.ContactOwner = db.Person.Find(3);
db.SaveChanges();
}
EF6 update the rest of the column in the Persons table but it is not updating the Contact_Id in Persons table.
Person entity:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public List<Contact> ContactList { get; set; }
}
Contact entity:
public class Contact
{
public int Id { get; set; }
public string Email { get; set; }
public string TelNo { get; set; }
public Person ContactOwner { get; set; }
}
What am I missing here?
Please help!
Since you are working with independent association. You can either
Adding and removing the relationship from ContactList
, but you need to retrieve from both 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();
Or you can use disconnected object, but you need to manually manage the relationship.
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();
PS
You might need to reconsider adding foreign key value, to make everything easier, updating foreign key just by mentioning the Id.
See this post for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With