导航属性是否可以为空

Bob*_*421 6 linq entity-framework

看看这个实体:

class EntityA
{
   public int Id { get;set; }
   public string Name { get;set; }
   public int? ClientId { get; set; }

   // Navigation properties:
   public ClientEntity? Client { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,该实体包含一个可选属性:ClientId。这意味着客户端是可选的。在这种情况下,sql server 数据库中的 ClientId 字段将包含 NULL。

我正在使用外键的导航属性:这是“客户端”属性。当 ClientId 为 null 时,Client 也应该为 null。

这就是为什么我声明:“ClientEntity?” 客户端属性的类型。

但我看到有人在相同的情况下声明“ClientEntity”(不可为空)。但我不明白他们如何在这种情况下操纵空客户端......

任何想法 ?

谢谢

小智 2

对于在为项目启用可空性时也遇到此问题的任何人来说,导航属性不应该为空。

根据微软的说法,

包含对多个相关实体的引用的集合导航应始终不可为 null。空集合意味着不存在相关实体,但列表本身决不应该为空。

https://learn.microsoft.com/en-us/ef/core/miscellaneous/nullable-reference-types

所以编码的解决方案是:

class EntityA
{
   public int Id { get;set; }
   public string Name { get;set; }
   public int ClientId { get; set; }

   // Navigation properties:
   public ClientEntity Client { get; set; } = null!;
}
Run Code Online (Sandbox Code Playgroud)

  • 您从 Microsoft 引用的链接正在讨论集合导航,即 ICollection 但您的示例是对单个实体的 1-1 引用 (8认同)