ฉันเปิดใช้งาน C # 8.0 ประเภทการอ้างอิงที่เป็นโมฆะในโครงการ. NET Core 3.0 โครงการใช้ Entity Framework Core 3.0 เพื่อเข้าถึงฐานข้อมูล
ต่อไปนี้เป็นตัวแบบข้อมูลที่หัวเรื่องไม่ควรเป็นโมฆะ
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 และ (อาจเป็นไปได้) การทำให้เป็นอนุกรมเพื่อผูกค่าจากฐานข้อมูลไปยังคลาส / โมเดลเหล่านี้ ตัวสร้างพับลิกอาจมีโครงสร้างรายการและประเภทของอาร์กิวเมนต์ที่แตกต่างจากคุณสมบัติที่โมเดลมี (ตัวอย่างเช่นมันอาจมีอาร์กิวเมนต์สำหรับชายด์ที่ต้องการแรกอาจมีอาร์กิวเมนต์บางอย่างเป็นทางเลือกเป็นต้น)
อย่างไรก็ตามคอมไพเลอร์สร้างCS8618 Non-nullable field is uninitialized. Consider declaring as nullable.
บนตัวprivate
สร้าง
ฉันสามารถปิดการใช้งาน CS8616 สำหรับตัวprivate
สร้างได้#pragma warning disable CS8618
แต่ฉันไม่คิดว่าเป็นความคิดที่ดี
มันควรจะใช้ C # 8.0 ชนิดอ้างอิงที่ทำให้เป็นโมฆะในสถานการณ์นี้ได้อย่างไร? หรือโมเดลของฉันเป็นการหลอกลวงหรือละเมิดแนวปฏิบัติที่ดีที่สุด - จะทำอย่างไรให้ถูกต้อง?
น่าเสียดายที่ฉันพบเอกสารหรือคำแนะนำที่ไม่เกี่ยวข้อง