С проекциями (0 изменений):
var changesBefore = Db.ChangeTracker.Entries<OrderLocationEntity>().ToList(); //before change - 0
var orderLocation = Db.OrderLocation.AsTracking().Select(ol => new OrderLocationEntity
{
Id = ol.Id,
Address = ol.Address,
City = ol.City,
Created = ol.Created,
OrderId = ol.OrderId,
Zip = ol.Zip
}).First();
orderLocation.Address = "address";
var changesAfter = Db.ChangeTracker.Entries<OrderLocationEntity>().ToList(); //after change - 0
Без прогнозов (1 изменения)
var changesBefore = Db.ChangeTracker.Entries<OrderLocationEntity>().ToList(); //before change - 0
var orderLocation = Db.OrderLocation.AsTracking().First();
orderLocation.Address = "address";
var changesAfter = Db.ChangeTracker.Entries<OrderLocationEntity>().ToList(); //after change - 1
Настройка
Microsoft.EntityFrameworkCore 3.1.1
Microsoft.EntityFrameworkCore.Sqlite 3.1.1
var options = new DbContextOptionsBuilder<OrderDatabaseContext>()
.UseSqlite("DataSource=:memory:")
.Options;
Если результирующий набор содержит типы сущностей, выходящие из состава LINQ, EF Core будет отслеживать их.
Источник
https://docs.microsoft.com/en-us/ef/core/querying/tracking
Почему изменения не отслеживаются при использовании проекций?