如何为我编写的实体框架 IncludeAll() 方法执行 [MemberNotNull]?

Dav*_*len 7 c# entity-framework-core

我有以下辅助方法。这包括我的 Event DbSet 中的所有复杂属性(实际上有 9 个属性,但为了清楚起见我减少了它):

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

我使用它如下:

_event = await dbContext.Events
    .IncludeAll()
    .FirstOrDefaultAsync(e => e.Id == pkEvent);
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我在该调用中收到警告,可能需要描述、标签和缩略图。并且在第一次使用每个时,再次警告它们可能为空。

有没有办法做类似以下的事情:

[MemberNotNull(nameof(Description))]
public static IQueryable<Event> IncludeAll(this IQueryable<Event> source)
Run Code Online (Sandbox Code Playgroud)

这具体是行不通的。

Wah*_*tar 0

对我来说,我将这些导航属性定义为不可修改并null!为其赋值。

public class Event
{
    public int Id {get; init;}
    public Description Description {get; set;} = null!;
}
Run Code Online (Sandbox Code Playgroud)

我知道不建议使用null!赋值,但我发现这是一个很好的解决方案,我知道当我的代码中需要它时我会包含它。

为了对此做出更多限制,我使用规范模式访问我的数据,因此它只是包含导航属性的一种方法