Skip to content

don't rewrite the query root when attempting to track the results#132

Merged
koenbeuk merged 4 commits intoEFNext:masterfrom
hahn-kev:fix-entity-tracking
May 4, 2025
Merged

don't rewrite the query root when attempting to track the results#132
koenbeuk merged 4 commits intoEFNext:masterfrom
hahn-kev:fix-entity-tracking

Conversation

@hahn-kev
Copy link
Contributor

@hahn-kev hahn-kev commented May 2, 2025

closes #129

The issue is that you can't query entities and have them be tracked, so this fails:

var entity = db.Entities.First();
db.Remove(entity);//throws because entity isn't tracked

This is because db.Entities.First() is rewritten into db.Entities.Select(e => new Entity { ...e }).First() and this breaks entity tracking.

So I introduced some fixes so that if tracking was going to happen then it wouldn't be rewritten. This is determined via the default tracking behavior, configured like:

optionsBuilder.UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll); //default value shown

or based on if AsTracking or AsNoTracking` is part of the query, eg:

var entity = db.Entities.AsTracking().First();//query is not rewritten
var entity = db.Entities.AsNoTracking().First();//query is rewritten

default applies first and can be overridden by using AsTracking or AsNoTracking explicitly. So if you want root rewriting by default, then I suggest you set the default tracking behavior to NoTracking and everything will keep working as it does in the current release. If however you use tracking by default, then you can call AsNoTracking or ExpandProjectables to rewrite the root query.

@koenbeuk koenbeuk merged commit 0231edf into EFNext:master May 4, 2025
4 checks passed
@koenbeuk
Copy link
Collaborator

koenbeuk commented May 4, 2025

Thanks!

@hahn-kev
Copy link
Contributor Author

hahn-kev commented May 5, 2025

Awesome, when do you think an updated nuget package will be available?

github-merge-queue bot pushed a commit to DFE-Digital/teaching-record-system that referenced this pull request Feb 24, 2026
Updated
[EntityFrameworkCore.Projectables](https://github.com/koenbeuk/EntityFrameworkCore.Projectables)
from 4.0.0 to 5.0.2.

<details>
<summary>Release notes</summary>

_Sourced from [EntityFrameworkCore.Projectables's
releases](https://github.com/koenbeuk/EntityFrameworkCore.Projectables/releases)._

## 5.0.2

## What's Changed
* Fix pack and prerelease workflow by @​PhenX in
EFNext/EntityFrameworkCore.Projectables#145
* Add support for dictionary index initializers in expressions by
@​PhenX in
EFNext/EntityFrameworkCore.Projectables#146


**Full Changelog**:
EFNext/EntityFrameworkCore.Projectables@v5.0.0...v5.0.2

## 5.0.0

## What's Changed
* Handle global query filters (Fixes #​81) by @​PhenX in
EFNext/EntityFrameworkCore.Projectables#130
* don't rewrite the query root when attempting to track the results by
@​hahn-kev in
EFNext/EntityFrameworkCore.Projectables#132
* Add support for declaration patterns in switch expressions by convert…
by @​7645re in
EFNext/EntityFrameworkCore.Projectables#136
* Add support for .NET 10 by @​PhenX in
EFNext/EntityFrameworkCore.Projectables#142

## New Contributors
* @​hahn-kev made their first contribution in
EFNext/EntityFrameworkCore.Projectables#132
* @​7645re made their first contribution in
EFNext/EntityFrameworkCore.Projectables#136

**Full Changelog**:
EFNext/EntityFrameworkCore.Projectables@v4.0.0...v5.0.0

## 4.1.0-preview.1

## What's Changed
* Handle global query filters (Fixes #​81) by @​PhenX in
EFNext/EntityFrameworkCore.Projectables#130
* don't rewrite the query root when attempting to track the results by
@​hahn-kev in
EFNext/EntityFrameworkCore.Projectables#132
* Add support for declaration patterns in switch expressions by convert…
by @​7645re in
EFNext/EntityFrameworkCore.Projectables#136

## New Contributors
* @​hahn-kev made their first contribution in
EFNext/EntityFrameworkCore.Projectables#132
* @​7645re made their first contribution in
EFNext/EntityFrameworkCore.Projectables#136

**Full Changelog**:
EFNext/EntityFrameworkCore.Projectables@v4.0.0...v4.1.0

Commits viewable in [compare
view](EFNext/EntityFrameworkCore.Projectables@v4.0.0...v5.0.2).
</details>

[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=EntityFrameworkCore.Projectables&package-manager=nuget&previous-version=4.0.0&new-version=5.0.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: James Gunn <james@gunn.io>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

EF Core 9 Change Tracking stops working when [Projectable(UseMemberBody=)] is used in an Entity.

2 participants