Goran
Goran

Reputation: 6518

Many to many relationship detecting changes

I am trying to understand why DbContext doesn't detect changesin many-to-many relationship. This is what I have set in model configuration:

this.Configuration.ValidateOnSaveEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;

This is the test code:

var book = Context.Set<Book>().Where(b => b.Id == 1).Single();
var author = Context.Set<Author>().Where(a => a.Id == 2).Single();

book.Authors.Add(author);

if I check for changes, it doesn't report any:

// returns false
_context.ChangeTracker.Entries().Any(e => e.State == EntityState.Added || e.State == EntityState.Modified || e.State == EntityState.Deleted);

If I save changes, changes are updated to database correctly.

// 1 record added to BookAuthors table
_context.SaveChanges();

Why is DbContext not tracking changes for many-to-many? WCF is not involved, this is a direct connection to Sql server.

Upvotes: 5

Views: 2085

Answers (1)

Ladislav Mrnka
Ladislav Mrnka

Reputation: 364319

DbContext is not tracking changes because ChangeTracker doesn't hold all information. It is able to give you only state of entities but not state of independent associations (that is state of many-to-many and some one-to-many relations). If you want to get state of many-to-many relation you must get ObjectContext and ask ObjectStateManager as described in the link provided by @Mark Oreta.

Upvotes: 6

Related Questions