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

在Entity Framework导航属性中是否应使用required修饰符?

启用Nullable Reference Types后EF实体关系中required关键字的使用疑问

已启用Nullable Reference Types,以下是实体类代码:

原始实体类定义

TestExecution类

public class TestExecution
{
    [Key]
    public int Id { get; set; }

    public ParametersSet? ParametersSet { get; set; }

    [ForeignKey("Environment")]
    public required int EnvironmentId { get; set; }

    public required Environment Environment { get; set; }
}

ParametersSet类

public class ParametersSet
{
    [Key]
    public int Id { get; set; }

    // 其他属性

    [ForeignKey("TestExecutionId")]
    public int TestExecutionId { get; set; }

    public TestExecution TestExecution { get; set; }
}

Environment类

public class Environment
{
    [Key]
    public int Id { get; set; }

    // 其他属性

    public ICollection<TestExecution> TestExecutions { get; set; } = new List<TestExecution>();
}

我明白在可选(因启用NRT而标记为可空)的关系里不该用required,所以在TestExecution中写了public ParametersSet? ParametersSet { get; set; }。

但有两个问题:

  • 对于从依赖实体ParametersSet到主体实体TestExecution的关系,是否应该像下面这样使用required?
public class ParametersSet
{
    [Key]
    public int Id { get; set; }

    [ForeignKey("TestExecutionId")]
    public required int TestExecutionId { get; set; }

    public required TestExecution TestExecution { get; set; }
}
  • 对于从依赖实体TestExecution到主体实体Environment的关系,是否应该保持当前这种required的使用方式?
public class TestExecution
{
    [Key]
    public int Id { get; set; }

    public ParametersSet? ParametersSet { get; set; }

    [ForeignKey("Environment")]
    public required int EnvironmentId { get; set; }

    public required Environment Environment { get; set; }
}

EF文档提到,若使用C# 11及以上版本,required成员是解决这类问题的理想方案,但并未明确说明是否应该在导航属性中使用该关键字。


内容的提问来源于stack exchange,提问作者noobie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 13:51:18