You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blazor QuickGrid中查看查找表(Lookup Table)的值?

访问Blazor中EF Core关联表的属性值(Movie与MovieStarRating)

你当前的代码里,FilteredMovies只查询了Movie表的数据,没有加载关联的MovieStarRating,EF Core默认不会自动加载关联数据(懒加载需要额外配置且在InteractiveServer模式下可能有问题),直接访问movie.MovieStarRating.Descr会导致空引用异常。下面是具体的解决步骤:

1. 使用Include方法加载关联数据(对应SQL内连接)

修改FilteredMovies的定义,通过Include方法告诉EF Core要一起加载MovieStarRating关联数据,这就相当于SQL里的INNER JOIN:

private IQueryable<Movie> FilteredMovies =>
    context.Movie.Include(m => m.MovieStarRating)
                 .Where(m => m.Title!.Contains(titleFilter));

2. 处理关联数据可能为空的情况

因为你的MovieStarRating导航属性是可空类型(MovieStarRating?),为了避免空引用错误,在QuickGrid的列里可以用空合并运算符处理:

<PropertyColumn Property="movie => movie.MovieStarRating?.Descr ?? '无星级'" Title="星级描述" />

3. (可选)显式配置EF Core关联关系

虽然EF Core能通过约定识别外键和导航属性,但在DbContext里显式配置关系会让代码更清晰,也能自定义删除行为等规则:

// 在你的BlazorWebAppMoviesContext类中
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Movie>()
        .HasOne(m => m.MovieStarRating) // Movie关联一个MovieStarRating
        .WithMany() // MovieStarRating没有反向导航属性,所以用WithMany()
        .HasForeignKey(m => m.MovieStarRatingId) // 指定外键字段
        .OnDelete(DeleteBehavior.Restrict); // 设置删除行为,比如禁止删除被Movie引用的MovieStarRating
}

这样修改后,你的QuickGrid就能正常显示Movie关联的MovieStarRating的Descr属性值了。

内容的提问来源于stack exchange,提问作者Rusty0918-B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:19