【发布时间】:2020-07-14 21:25:50
【问题描述】:
我可能不明白某些东西在 Blazor 中是如何工作的,但这是我的问题:
每当我想编辑一个对象时,例如People 对象,我从表中的@page "/people" 中选择它,然后我被重定向到@page "people/edit/id"。在@page "people/edit" 我有一个EditForm 和InputText 对应于人员模型和@bind 值,一切正常,它正确加载数据。
问题是当我编辑一些输入而不保存数据,只是修改它的值,然后回到@page "people",或者任何地方,对象被修改了。
我什至放了一个断点来观察通过Entity Framework Core从数据库中拉出的对象,它也显示了修改后的版本,但是查看数据库表,它似乎没有受到影响。
这听起来不可能,但我尝试了全新的项目,或者其他人在视频教程中的项目,尝试复制并做同样的事情,那么这里有什么问题?
@page "/People/edit{id}"
@code {
[Parameter] public string id { get; set; }
Person person = new Person();
protected override async Task OnParametersSetAsync()
{
person = await PersonService.GetByIdAsync(id);
}
}
【问题讨论】:
-
嗯,EF 对象,即 POCO 类的实例,是引用类型,所以如果您在一处更改,那么您将在整个代码中受到影响。因此,即使您从数据库中提取新实例,也不会调用
SubmitChanges它不会受到影响。因此,您将在内存中拥有记录的“一个版本”,并且您将从 DB 中提取另一个版本。 -
我想过,但在 Net Core MVC 项目上尝试了同样的事情,但没有发生......
-
听起来更改跟踪正在将您的更改缓存在 DbContext 中。
标签: sql-server entity-framework-core blazor blazor-client-side