linq 导航属性是否可以为Null

kcwpcxri  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(155)

看看这个实体:

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

   // Navigation properties:
   public ClientEntity? Client { get; set; }
}

如您所见,此实体包含一个可选属性:ClientId。这意味着客户端是可选的。在这种情况下,在sql server数据库中ClientId字段将包含NULL。
我正在使用外键的导航属性:这是“Client”属性。当ClientId为空时,Client也应该为空。
这就是为什么我宣布:客户端属性的“ClientEntity?”类型。
但是我看到有人在同样的情况下声明“ClientEntity”(不可空)。但是我不明白他们如何在这种情况下操作空客户端...
你知道吗?
谢谢

xlpyo6sf

xlpyo6sf1#

对于在为其项目启用可为空性时也遇到此问题的任何人,导航属性不应为可为空。
根据微软的规定,
包含对多个相关实体的引用的集合导航应始终不可为空。空集合意味着不存在相关实体,但列表本身不应为空。
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!;
}

相关问题