![]() ![]() ![]() When the query to use identity resolution is configured with no tracking, a stand-alone change tracker is used in the background when generating query results so each instance is materialized only once. There's also associated entry added in the QueryTrackingBehavior enum. Just like AsNoTracking queryable operator, we've added another operator AsNoTrackingWithIdentityResolution(IQueryable). That is, you can have a no-tracking query, which does identity resolution in the results. Tracking and no-tracking can be combined in the same query. Return a new instance of the entity even when the same entity is contained in the result multiple times.Don't use the change tracker and don't do identity resolution.If the result contains the same entity multiple times, the same instance is returned for each occurrence. When materializing an entity, EF Core returns the same entity instance from the change tracker if it's already being tracked. Since a tracking query uses the change tracker, EF Core does identity resolution in a tracking query. The next section explains when a no-tracking query might be less efficient than a tracking query. The default tracking behavior can be changed at the context instance level: = QueryTrackingBehavior.NoTracking A no-tracking query also give results based on what's in the database disregarding any local changes or added entities. An individual query can be set to be no-tracking. If the entities retrieved from the database don't need to be updated, then a no-tracking query should be used. They're generally quicker to execute because there's no need to set up the change tracking information. No-tracking queries are useful when the results are used in a read-only scenario. Query results don't contain any entity which is added to the context but not yet saved to the database. If the entity isn't found in the context, EF Core creates a new entity instance and attaches it to the context. EF Core doesn't overwrite current and original values of the entity's properties in the entry with the database values. If EF Core finds an existing entity, then the same instance is returned, which can potentially use less memory and be faster than a no-tracking query. When the results are returned in a tracking query, EF Core checks if the entity is already in the context. In the following example, the change to the blogs rating is detected and persisted to the database during SaveChanges: var blog = (b => b.BlogId = 1) A tracking query means any changes to entity instances are persisted by SaveChanges. Tracking queriesīy default, queries that return entity types are tracking. You can view this article's sample on GitHub. ![]()
0 Comments
Leave a Reply. |