I have the following two models and DbContext:
public class TestDbContext : DbContext { public IDbSet<Person> People { get; set; } public IDbSet<Car> Cars { get; set; } } public class Person { public Person() { ID = Guid.NewGuid(); } public Guid ID { get; set; } public string Name { get; set; } public virtual List<Car> Cars { get; set; } } public class Car { public Car() { ID = Guid.NewGuid(); } public Guid ID { get; set; } public string Name { get; set; } public virtual Person Owner { get; set; } }
Then I announce a list of people and a list of cars, setting the owner of the first car to the first person on the list:
List<Person> People = new List<Person>() { new Person() {Name = "bill", ID = new Guid("6F39CC2B-1A09-4E27-B803-1304AFDB23E3")}, new Person() {Name = "ben", ID = new Guid("3EAE0303-39D9-4FD9-AF39-EC6DC73F630B")} }; List<Car> Cars = new List<Car>() { new Car() { Name = "Ford", Owner = People[0], ID = new Guid("625FAB6B-1D56-4F57-8C98-F9346F1BBBE4") } };
I store this in the database using the following code and it works fine.
using (TestDbContext context = new TestDbContext()) { foreach (Person person in People) { if (!(context.People.Any(p => p.ID == person.ID))) context.People.Add(person); else { context.People.Attach(person); context.Entry<Person>(person).State = System.Data.EntityState.Modified; } } foreach (Car caar in Cars) { if (!(context.Cars.Any(c => c.ID == caar.ID))) context.Cars.Add(caar); else { context.Cars.Attach(caar); context.Entry<Car>(caar).State = System.Data.EntityState.Modified; } } context.SaveChanges(); }
If I then changed the car owner to a second person and ran the code again, the property of the car owner will not be updated.
Cars[0].Owner = People[1];
Any ideas what I'm doing wrong? Thanks for any help.
c # relational-database orm entity-framework-5 entity-framework
user2697817
source share