Tôi đang kích hoạt các loại tham chiếu không thể sử dụng C # 8.0 trên dự án .NET Core 3.0. Dự án sử dụng Entity Framework Core 3.0 để truy cập cơ sở dữ liệu.
Dưới đây là mô hình dữ liệu có Tiêu đề không được rỗng.
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;
}
}
Mã riêng được cho là chỉ sử dụng các hàm public
tạo trong khi các hàm private
tạo ở đó chỉ để cho phép Entity Framework Core và (cũng có khả năng) tuần tự hóa để liên kết các giá trị từ cơ sở dữ liệu với các lớp / mô hình này. Hàm tạo công khai có thể có cấu trúc, danh sách và loại đối số khác với các thuộc tính mà mô hình có (ví dụ: nó cũng có thể chứa các đối số cho con được yêu cầu đầu tiên, nó có thể có một số đối số tùy chọn, v.v.).
Tuy nhiên, trình biên dịch tạo ra CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
trên các hàm private
tạo.
Tôi có thể vô hiệu hóa CS8616 cho các nhà private
xây dựng bằng cách #pragma warning disable CS8618
nhưng tôi không coi đó là một ý tưởng tốt.
Làm thế nào để sử dụng các loại tham chiếu không thể sử dụng C # 8.0 trong kịch bản này? Hoặc là mô hình của tôi không có thật hoặc vi phạm các thực tiễn tốt nhất - làm thế nào để làm điều đó đúng?
Thật không may, tôi đã tìm thấy tài liệu hoặc hướng dẫn không liên quan.