Entity Framework Core modelleriyle C # 8.0 Null Edilebilir Referans Türleri nasıl kullanılır?


16

Bir .NET Core 3.0 projesinde C # 8.0 Nullable Reference Türlerini etkinleştiriyorum. Proje, veritabanına erişmek için Entity Framework Core 3.0 kullanır.

Aşağıda, Başlığı boş olmaması gereken bir veri modeli verilmiştir.

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;
    }
 }

Kendi kodunun publicyapıcıları yalnızca yapıcılar yalnızca privateEntity Framework Core ve (potansiyel olarak da) serileştirmenin değerleri veritabanından bu sınıflara / modellere bağlamak için izin vermek için orada olduğu zaman kullanması gerekir. Genel kurucu, modelin sahip olduğu özelliklerden farklı yapı, liste ve tür argümanlarına sahip olabilir (örneğin, ilk gerekli çocuk için argümanlar da içerebilir, isteğe bağlı bazı argümanlar olabilir vb.).

Ancak, derleyici yapıcılar CS8618 Non-nullable field is uninitialized. Consider declaring as nullable.üzerinde üretir private.

Ben devre dışı CS8616 am güçlü privatetarafından yapıcıları #pragma warning disable CS8618ama iyi bir fikir olarak düşünmüyoruz.

Bu senaryoda C # 8.0 Nullable Reference Türleri nasıl kullanılır? Yoksa modelim sahte veya en iyi uygulamaları ihlal ediyor - nasıl düzgün bir şekilde yapılır?

Ne yazık ki, ilgili dokümanlar veya rehberlik bulamadım.


Yanıtlar:


6

Null edilemeyen gezinme özelliklerini işlemek için uygun bir yol yoktur.

  1. Belgeler iki yol önerir ve ikisi de güvenli değildir. Bir destek alanı kullanın ve InvalidOperationException öğesini atın. Hiçbir şey yapmamaktan ve NullReferenceException özelliğinden nasıl farklı olduğu belirsizdir.
  2. Boş bağışlama operatörü ile bastır

Resmi dokümantasyon bağlantısı: https://docs.microsoft.com/tr-tr/ef/core/miscellaneous/nullable-reference-types#non-nullable-properties-and-isitialization


2

Gönderen kurucular ile Varlık türleri için MS Dokümanlar

EF Core, bir sorgunun sonuçları gibi bu türden örnekler oluşturduğunda, önce varsayılan parametresiz yapıcıyı çağırır ve ardından her özelliği veritabanındaki değere ayarlar. Bununla birlikte, EF Core, eşlenen özelliklerinkilerle eşleşen parametre adlarına ve türlerine sahip parametreli bir kurucu bulursa, bunun yerine bu özelliklerin değerleriyle parametreli kurucuyu çağırır ve her özelliği açıkça ayarlamaz.

Belki de bu özellikler için gerekli parametreyle özel bir ctor oluşturmaya ve Framework'ün bunu çağırıp çalışıp çalışmayacağını görmeye değer mi?

Ayrıca, uyarıları devre dışı bırakmak, devre dışı bırakmanın uygun olduğundan tamamen% 100 emin değilseniz iyi bir fikir değildir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.