如何在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
相关产品推荐
相关产品推荐

