.NET 8 EF Core v8.0.1中SaveChanges修改SalesQuotes失败问题
.NET Framework EF升级到.NET 8 EF Core v8.0.1后TPT模式数据更新失效问题
问题现象
将项目从.NET Framework EF升级到.NET 8 EF Core v8.0.1后,使用**表每类型(TPT)**策略时,无法修改SalesQuotes数据:测试代码中修改SalesQuotes的CustomerReference属性后调用SaveChanges(),重新查询数据库发现数据未更新。调试时确认属性值已修改,但SaveChanges()未同步到数据库,手动调用ChangeTracker.DetectChanges()也无效果。
相关代码
DbContext初始化代码如下:
public static MyEFCoreDbContext MakeConnectFromConnectionString(string connectionString) { var optionsBuilder = new DbContextOptionsBuilder<MyEFCoreDbContext>() .UseSqlServer(connectionString) .UseChangeTrackingProxies() .UseObjectSpaceLinkProxies(); return new MyEFCoreDbContext(optionsBuilder.Options); }
注:
OnModelCreating中已配置变更跟踪策略、关联删除行为等。
排查与解决方案
排查后发现问题根源:基类BaseSalesHeader手动实现了INotifyPropertyChanged接口。移除该手动实现后,测试数据更新正常。
关键说明
使用EF Core的UseChangeTrackingProxies()启用变更跟踪代理时,EF Core会自动为实体类实现INotifyPropertyChanged接口,无需手动实现。手动实现该接口会与EF Core的代理逻辑冲突,导致变更跟踪失效,进而无法将属性变更同步到数据库。
内容的提问来源于stack exchange,提问作者Kirsten
相关产品推荐
相关产品推荐

