dotnet / dotnet/efcore

EF adds object instance to navigation property when object instance is deleted

Open
#33,914 8 comments 0 reactions 0 assignees View on GitHub
area-change-tracking breaking-change consider-for-next-release customer-reported needs-design
Dominant language
C#
Stars
14.8k
Forks
3.4k
PR merge metrics
PR metrics pending

Description

// In my code I am passing a user object to a method. The object has been edited and is in a state that
// represents how it is supposted to saved to disk. In this example the user has zero UserDataRoles defined
// that means that if any UserDataRoles exist on disk they should be deleted.
// However for some reason EF adds the UserDataRoles to the user object when the role
// object State is set to deleted.

User user = db.Users.First();
db.Entry(user).State = EntityState.Modified;
db.SaveChanges();
Debug.Assert(user.UserDataRoles.Count == 0); // Passes
UserDataRole role = db.UserDataRoles.Where(x => x.UserId == user.UserId).First();
Debug.Assert(user.UserDataRoles.Count == 0); // Passes
db.Entry(role).State = EntityState.Deleted; // EF adds role to user.UserDataRoles here
Debug.Assert(user.UserDataRoles.Count == 0); // Fails. Why is role added to user.UserDataRoles?

Versions:
net8
EF Core 8.0.6

[EFProblem.zip](https://github.com/user-attachments/files/15591380/EFProblem.zip)

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.