gpt4 book ai didi

c# - 如何将 C# 8.0 可空引用类型与 Entity Framework Core 模型一起使用?

转载 作者:太空狗 更新时间:2023-10-29 19:47:38 24 4
gpt4 key购买 nike

我正在 .NET Core 3.0 项目上启用 C# 8.0 可空引用类型。该项目使用 Entity Framework Core 3.0 访问数据库。

下面是一个Title不能为null的数据模型。

public class Vehicle
{
public int Id { get; private set; }

public string Title { get; private set; }

// Entity Framework Core is instructed to bind to the private _drivers field in a configuration builder
private readonly List<Driver> _drivers = new List<Driver>();
public IReadOnlyCollection<Driver> Drivers => _drivers.AsReadOnly();

private Vehicle()
{
}

public Vehicle(string title)
{
this.Title = title;
}

public void AddDriver(string name)
{
this._drivers.Add(new Driver(name));
}
}

// A foreign column is defined in a configuration builder
public class Driver
{
public int Id { get; private set; }

public string Name { get; private set; }

private Driver()
{
}

public Driver(string name)
{
this.Name = name;
}
}

自己的代码应该只使用 public 构造函数,而 private 构造函数只是为了允许 Entity Framework Core 和(也可能)序列化从数据库绑定(bind)值这些类/模型。公共(public)构造函数可能具有与模型具有的属性不同的结构、列表和参数类型(例如,它可能还包含第一个必需子项的参数,它可能有一些可选参数等)。

但是,编译器生成 CS8618 Non-nullable field is uninitialized。考虑在 private 构造函数上声明为 nullable.

我可以通过 #pragma warning disable CS8618private 构造函数禁用 CS8616,但我认为这不是一个好主意。

在这种情况下应该如何使用 C# 8.0 可空引用类型?还是我的模型是伪造的或违反了最佳实践 - 如何正确地做到这一点?

很遗憾,我没有找到相关的文档或指南。

最佳答案

没有正确的方法来处理不可为 null 的导航属性。

  1. 文档建议了两种方法,但都不是类型安全的。用一个支持字段并抛出 InvalidOperationException。目前还不清楚如何它不同于什么都不做并且有一个 NullReferenceException
  2. 用 null 宽容运算符抑制它

官方文档链接:https://learn.microsoft.com/en-us/ef/core/miscellaneous/nullable-reference-types#non-nullable-properties-and-initialization

关于c# - 如何将 C# 8.0 可空引用类型与 Entity Framework Core 模型一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58171942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com