代码之家  ›  专栏  ›  技术社区  ›  David Thielen

如何为我编写的Entity Framework IncludeAll()方法执行[MemberNotNull]?

  •  0
  • David Thielen  · 技术社区  · 2 年前

    我有以下助手方法。这包括我的事件数据库集中的所有复杂属性(实际上有9个属性,但为了清楚起见,我减少了它):

    public static IQueryable<Event> IncludeAll(this IQueryable<Event> source)
    {
        return source
            .Include(e => e.Description)
            .Include(e => e.Tags)
            .Include(e => e.Thumbnail);
    }
    

    我使用它如下:

    _event = await dbContext.Events
        .IncludeAll()
        .FirstOrDefaultAsync(e => e.Id == pkEvent);
    

    当我这样做的时候,我在那个调用中得到警告,它可能需要Description、Tags和&缩略图。在第一次使用each时,再次警告它们可能为null。

    有没有办法做到以下几点:

    [MemberNotNull(nameof(Description))]
    public static IQueryable<Event> IncludeAll(this IQueryable<Event> source)
    

    这显然是行不通的。

    0 回复  |  直到 2 年前
        1
  •  0
  •   Wahid Bitar    2 年前

    对我来说,我将这些导航属性定义为不可解析,并分配 null! 价值。

    public class Event
    {
        public int Id {get; init;}
        public Description Description {get; set;} = null!;
    }
    

    我知道不建议使用 无效的 任务,但我发现它是一个很好的解决方案,我知道当代码中需要它时,我会将其包含在内。

    为了对此进行更多限制,我使用 specification pattern 因此,将导航属性包括在内只是一种方式

    推荐文章