如何在Blazor应用程序中使用MVVM和EF Core仅更新更改字段?
我有一个blazor服务器应用程序,使用EF Core作为数据访问层如何在Blazor应用程序中使用MVVM和EF Core仅更新更改字段?,mvvm,entity-framework-core,blazor,change-tracking,Mvvm,Entity Framework Core,Blazor,Change Tracking,我有一个blazor服务器应用程序,使用EF Core作为数据访问层 当用户访问页面时,我从DbContext加载实体,用数据填充VM并处理db上下文 using var dbContext = DbContextFactory.CreateDbContext(); var entity = dbContext.Products.Find(Id); ViewModel = new ViewModel { Id = entity.Id, Name = entity.Name.. } 当用户单击
using var dbContext = DbContextFactory.CreateDbContext();
var entity = dbContext.Products.Find(Id);
ViewModel = new ViewModel { Id = entity.Id, Name = entity.Name.. }
using var dbContext = DbContextFactory.CreateDbContext();
var entity = dbContext.Products.Find(Id);
entity.Name = ViewModel.Name; .....
dbContext.SaveChanges();
我如何在Blazor应用程序中有效地做到这一点?特别是在没有不必要的干冲突的情况下。只需在ViewModel中包括哪些字段已更改,并仅更新这些字段。@SvyatoslavDanyliv:关于子集合、添加或删除的项目呢?我不想在每个可能的字段上编写
if(vm.fieldChanged)entity.Field=vm.Field
,也不想为每个字段手动编写更改跟踪,因为这将是大量重复代码,有大量错误空间。是的,我知道我们很懒惰。但是谁来代替我们写呢?可以使用和生成跟踪更改的ViewModels。我还没有看到框架(库),它可以为您做到这一点,并通过网络发送信息,然后自动应用图形更改…您可以在加载页面时序列化模型,然后在更新时反序列化它,并使用反射逐个将属性与更新后的模型进行比较。这样,它可以是一个通用过程,可以适用于所有模型。