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

