怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理
  819 随笔 :: 0 文章 :: 2 评论 :: 16万 阅读

Blazor razor 注释参数 SupplyParameterFromQuery SupplyParameterFromForm OnInitializedAsync

参数属性

[SupplyParameterFromQuery]
public int Id { get; set; }
[SupplyParameterFromForm]
public Movie? Movie { get; set; }
  • [SupplyParameterFromQuery]:这个特性表明Id参数是从查询字符串中获取的。例如,在URL https://example.com/movies/edit?id=123 中,123 就是通过查询字符串传递给组件的Id值。
  • [SupplyParameterFromForm]:这个特性表明Movie参数是从表单提交中获取的。当用户在表单中填写电影信息并提交时,Blazor会将表单数据绑定到Movie对象。

OnInitializedAsync方法

protected override async Task OnInitializedAsync()
{
Movie ??= await DB.Movie.FirstOrDefaultAsync(m => m.Id == Id);
if (Movie is null)
{
// Need a way to trigger a 404 here
}
}
  • 这是一个生命周期方法,在组件初始化时被调用。它用于获取要编辑的电影数据。
  • 首先,通过DB.Movie.FirstOrDefaultAsync方法从数据库中获取Id对应的电影数据,并将结果赋值给Movie属性。如果数据库中不存在对应的电影数据,Movie将为null
  • 然后,检查Movie是否为null。如果是null,则表示没有找到对应的电影数据,需要触发一个404错误。

更新电影数据的异步方法UpdateMovie

public async Task UpdateMovie()
{
DB.Attach(Movie!).State = EntityState.Modified;
try
{
await DB.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!MovieExists(Movie!.Id))
{
// Need a way to trigger a 404 here
}
else
{
throw;
}
}
NavigationManager.NavigateTo("/movies");
}
  1. 更新实体状态

    • DB.Attach(Movie!).State = EntityState.Modified;:这行代码的目的是将Movie实体的状态设置为Modified
      在Entity Framework中,实体具有不同的状态(如DetachedUnchangedAddedDeletedModified),这些状态决定了实体在数据库中的操作。
      通过将Movie实体的状态设置为Modified,表示该实体已经被修改,当调用SaveChangesAsync方法时,Entity Framework会生成相应的SQL语句来更新数据库中的对应记录。
  2. 处理并发冲突

    • 如果在保存更改时发生DbUpdateConcurrencyException异常(通常在多个用户同时尝试更新同一记录时可能发生),代码会进入异常处理块。
    • 在异常处理块中,首先检查通过MovieExists(Movie!.Id)方法判断数据库中是否还存在具有相同Id的电影记录。
      如果不存在,同样需要处理404错误的情况(这里的注释提到了一个已知问题,即目前还没有直接的方法来触发404错误)。
      如果存在,则重新抛出异常,以便在更高层次进行处理。
posted on   超级无敌美少男战士  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
历史上的今天:
2022-11-27 todolist 外观模式
点击右上角即可分享
微信分享提示