【发布时间】:2020-01-30 20:55:19
【问题描述】:
有预测(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
为什么使用投影时没有跟踪更改?
【问题讨论】:
-
“为什么在使用投影时不跟踪更改?”因为 EF Core 设计人员采用了这种方式。为什么要投影到相同的实体类型?跳过检索某些属性?嗯,很可能这就是他们没有被跟踪的原因。
标签: c# .net-core entity-framework-core entity-framework-core-3.1