I have two model classes:
public class Person {
public int Id { get; set; }
public string FirstName { get; set; }
public virtual List<Desert> Deserts {get;set;}
}
public class Desert{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Person> Persons{get;set}
}
If I add some persons to the database in Seed
method and add their favourite deserts to them:
var deserts = new List<Desert>{new Desert{Name = "IceCream"}, new Desert{Name = "Cake"}}
var persons = new List<Person> {
new Person{FirstName = "James", Deserts = deserts},
new Person{FirstName = "Joanna"}
};
persons.ForEach(person => context.Persons.AddOrUpdate(person));
context.SaveChanges();
Then somewhere in controller invoke method which removes desert from person(connection/relationship between person and desert) :
//removes desert from a person
public void RemoveDesert(int personId, int desertToRemoveId) {
Person person = db.Persons.Find(personId);
foreach(Desert desert in person.Deserts){
if(desert.Id == desertToRemoveId){
person.Deserts.Remove(desert);
}
}
context.saveChanges();
}
Will Entity Framework see that property public virtual List<Desert> FavouriteDeserts {get;set;}
changed and update it?
If not how to remove a desert which has Id=desertToRemoveId
from a person which has Id=personId
ans save changes in database? Can it be done without Lambda expressions?