我正在做非常基本的 CRUD Blazor Web 应用程序,我的创建和删除工作得很好,只要我在数据库中添加或删除项目,该项目就会立即在我的剃刀页面上更新。但当我使用更新方法时,我尝试了不同的方法,但没有任何效果。我真的不明白为什么创建和删除工作正常,但更新却不行?
我正在使用 onclick - 按钮调用方法。当用户单击“更新”/“创建”/“删除”时,将显示一个表单,询问您要删除或更新的记录的 ID。或者只是要求填写以创建新数据。
这是我的“创建”方法,它可以正常工作,只要用户按下“添加”按钮,就会显示包含数据库中数据的列表。
private async Task AddTrick()
{
await dr.Create(newTrick);
isVisibleCreate = false;
newTrick = new Tricks();
}
这是我的剃刀页面的更新方法:
private async Task LoadTrick(){
trick = await dr.GetTrickByIdAsync(idTrick);
}
private async Task UpdateTrick(){
await dr.Update(trick);
isVisibleUpdate = false;
trick = await dr.GetTrickByIdAsync(idTrick);
await InvokeAsync(StateHasChanged);
}
这是我在另一个类中的 CRUD 方法
public async Task Create(Tricks trick)
{
_context.Trick.AddAsync(trick);
await _context.SaveChangesAsync();
}
public async Task Update(Tricks trick)
{
var t = await _context.Trick.FindAsync(trick.Id);
t.Description = trick.Description;
t.Name = trick.Name;
t.Length = trick.Length;
t.Done = trick.Done;
await _context.SaveChangesAsync();
}
从您发布的代码中我相信您错过了致电:
await _context.Trick.UpdateAsync(trick);
您在
AddAsync()
方法中调用了 Create()
。应在更新方法中包含 UpdateAsync()`,否则对象状态仅在内存中更改。
public async Task Create(Tricks trick)
{
_context.Trick.AddAsync(trick);
await _context.SaveChangesAsync();
}
public async Task Update(Tricks trick)
{
var t = await _context.Trick.FindAsync(trick.Id);
t.Description = trick.Description;
t.Name = trick.Name;
t.Length = trick.Length;
t.Done = trick.Done;
// You need this line
await _context.Trick.UpdateAsync(t);
await _context.SaveChangesAsync();
}