不可为空的属性必须包含关于 EF 关系的非空值警告

     2023-02-16     148

关键词:

【中文标题】不可为空的属性必须包含关于 EF 关系的非空值警告【英文标题】:Non-nullable property must contain a non-null value warning on EF relationships 【发布时间】:2022-01-07 02:26:11 【问题描述】:

C# 编译器向我显示Non-nullable property must contain a non-null value on:

EFrelationships DbSet

根据本文档:Working with Nullable Reference Types 我可以使用以下方法消除DbSet 的警告:

public class DataContext : DbContext

    public DataContext(DbContextOptions options) : base(options) 
    
    public DbSet<Customer> Customers => Set<Customer>();
    public DbSet<Order> Orders => Set<Order>();

对于 EF relationships 以及以下示例,消除此警告的最佳方法是什么(不使用 #pragma warning disable CS8618)?

public class Customer

    public Guid CustomerId  get; set;  = Guid.NewGuid();
    public string Username  get; set; 
    public virtual IEnumerable<Order> Orders  get; set; 

    public Customer(string username)
    
        // still gets warning for `Orders`
        Username = username;
    

在关系的另一边:

public class Order

    public Guid OrderId  get; set;  = Guid.NewGuid();
    public string Description  get; set; 
    public Guid CustomerId  get; set; 
    public virtual Job Job  get; set; 

    public Log(string description, Guid customerId)
    
        // still gets warning for `Job`
        Description = description;
        CustomerId = customerId;
    

【问题讨论】:

你真的使用可为空的引用类型吗? 【参考方案1】:

回答我自己的问题我相信这是在 EF relationships 中删除警告的最合适方法:

public class Customer

    public Guid CustomerId  get; set;  = Guid.NewGuid();
    public string Username  get; set; 
    public virtual IEnumerable<Order> Orders  get; set;  = null!;

    public Customer(string username)
    
        Username = username;
    

在关系的另一边:

public class Order

    public Guid OrderId  get; set;  = Guid.NewGuid();
    public string Description  get; set; 
    public Guid CustomerId  get; set; 
    public virtual Job Job  get; set;  = null!;

    public Log(string description, Guid customerId)
    
        Description = description;
        CustomerId = customerId;
    

但如果有人有更好的想法,请随时分享。

【讨论】:

是的,我认为最好的方法是要么初始化它们,要么改变你的数据模型,但这样你就不能再使用可空类型了

外键约束,带有子对象集合的 EF

...误“操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关外键属性设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者不相关的对象必须删除 查看详情

Kotlin 中的非空值产生空指针异常

...ion【发布时间】:2019-03-3114:32:29【问题描述】:我有一个不可为空的值数组,如下所示:privatevaldogs=ArrayListDog()//replacewith<>它是这样填充的:valdog=Dog()dog.name=“bob”dogs.add(do 查看详情

无法删除用户外部登录

...息:操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或 查看详情

在实体配置中使用 EF Core HasQueryFilter 将可为空的数据库列映射到不可为空的属性?

...体配置中使用EFCoreHasQueryFilter将可为空的数据库列映射到不可为空的属性?【英文标题】:UsingEFCoreHasQueryFilterinentityconfigurationtomapnullabledbcolumnstonon-nullableproperties?【发布时间】:2021-04-1712:38:50【问题描述】:设置:在MSSQLServer数... 查看详情

为啥我收到警告说必须初始化一个不可为空的字段(当我确定我正在初始化它时)?

】为啥我收到警告说必须初始化一个不可为空的字段(当我确定我正在初始化它时)?【英文标题】:WhyamIgettingwarningthatanon-nullablefieldmustbeinitialised(WhenI\'msureI\'minitialisingit)?为什么我收到警告说必须初始化一个不可为空的字段(... 查看详情

一对多关系,如何匹配非空值

参考技术Aupdate选项。要合并这个方法很简单,加一个update选项就可以了,update的意思是,如果原来的数据集合该数据为空,那么就使用匹配数据集里面的非空数据替换掉的。 查看详情

颤振测试中的非空变量

...我编写我的第一个测试时,我有一个错误说“必须先分配不可为空的局部变量‘mockNumberTriviaRepository’ 查看详情

NetCore 6 - 将空文字或可能的空值转换为不可为空的类型

】NetCore6-将空文字或可能的空值转换为不可为空的类型【英文标题】:NetCore6-Convertingnullliteralorpossiblenullvaluetonon-nullabletype【发布时间】:2021-11-1119:32:05【问题描述】:我将项目更新到NetCore6,但收到警告:Convertingnullliteralorpossibl... 查看详情

EF 随机看到错误的属性类型

】EF随机看到错误的属性类型【英文标题】:EFrandomlyseeswrongpropertytype【发布时间】:2016-05-0220:29:06【问题描述】:我们首先在EF6.1.3和SimpleInjector3.1.0中使用EF代码,并且我们随机收到与此类似的异常:“Location”上的“IsDeleted”属... 查看详情

spark sql 获取列中先前的非空值

...时间】:2020-02-0705:03:55【问题描述】:我只在sparkSQL中不为空时才尝试获取列的前一行值。由于忽略空值不可用,因此替代方法是排名并获得最大值。lag(valignorenulls)over()SELECTid,val,val_partition,MAX(val)over(par 查看详情

可为空的引用类型和构造函数警告

...我使我的实体类具有构造函数,该构造函数接受初始化其不可为空属性所需的所有数据:publicclassMyEntitypublicMyEn 查看详情

根据可以具有值或为空的字段选择组内的行

】根据可以具有值或为空的字段选择组内的行【英文标题】:Selectingrowswithingroupbasedonfieldthatcanhaveavalueorisnull【发布时间】:2012-04-2006:03:12【问题描述】:从下表中为每个IssIDFieldID组,我想选择包含最低ChgGrpID值的行,如果组中存... 查看详情

控制器属性不能包含非标量\/非空值

】控制器属性不能包含非标量\\\\/非空值【英文标题】:Controllerattributescannotcontainnon-scalar\\/non-nullvalues控制器属性不能包含非标量\\/非空值【发布时间】:2017-02-1323:21:06【问题描述】:我想为我的控制器对象提供这样的hinclude.js... 查看详情

oracle的疑问,字段数据为空的时候,检索数据的不同结果

...nvl(AA,chr(0))<>'中国';脚本1执行的结果是:AA字段为空(NULL)的都被过滤不显示,等于‘中国’的也不显示;脚本2执行的结果就正常了,只是过滤了AA为'中国'的记录;现在请高手解释一下为什么会出现这种情况吧... 查看详情

Azure 流分析 - 您可以查询最新的非空值吗?

...05-2719:42:38【问题描述】:我有一个Azure流分析作业,其中包含来自IoT中心的输入数据,并且我正在将此数据发送到PowerBI。数据正在使用pub/sub更新,因此每条消息只更新一个值。因此,我的输入数据看起来像这样(Me 查看详情

必须初始化不可为空的实例字段“taskTitle”

】必须初始化不可为空的实例字段“taskTitle”【英文标题】:Non-nullableinstancefield\'taskTitle\'mustbeinitialized【发布时间】:2021-09-2423:32:48【问题描述】:我是Flutter开发的新手,在我的代码中为什么我会收到此错误(必须初始化不可... 查看详情

Flutter-不可为空的实例字段'questionAnswer','questionText'必须初始化

】Flutter-不可为空的实例字段\\\'questionAnswer\\\',\\\'questionText\\\'必须初始化【英文标题】:Flutter-Non-nullableinstancefield\'questionAnswer\',\'questionText\'mustbeinitializedFlutter-不可为空的实例字段\'questionAnswer\',\'questionText\'必须初始化【发布... 查看详情

不可为空的实例字段 ['controller'] 必须在颤振中初始化

】不可为空的实例字段[\\\'controller\\\']必须在颤振中初始化【英文标题】:Non-nullableinstancefield[\'controller\']mustbeinitializedinflutter不可为空的实例字段[\'controller\']必须在颤振中初始化【发布时间】:2021-11-0810:58:01【问题描述】:美... 查看详情