Myślę, że masz na myśli coś takiego:
public class PostFile {
public Int32 UserId{ get; set; }
public Int32 PostId { get; set; }
public virtual User? User { get; set; }
public virtual Post? Post { get; set; }
}
Oryginalny problem-to ostrzeżenie o tym, że w C#8 wprowadzono bardziej precyzyjne określanie typów linków z zerową możliwością. Dla encji powyższa implementacja jest nie do zaakceptowania, jeśli tylko ten związek naprawdę nie są opcjonalne, co będzie wymagać, aby ich pola FK (identyfikator użytkownika i identyfikator postu) również były puste. Najprawdopodobniej nie są one opcjonalne.
Podstawowe opcje rozwiązania tego problemu:
A) Wyłącz tę funkcję. (Wyłącz zerowe linki w projekcie)
B) Poproś "przepraszam" za to, że nigdy nie powinno być zero, ale nie będą znajdować się w rzeczywistym stanie przy budowie. (EF będzie nimi zarządzać)
public class PostFile {
public Int32 UserId{ get; set; }
public Int32 PostId { get; set; }
public virtual User User { get; set; } = null!;
public virtual Post Post { get; set; } = null!;
}
Zmiana modelu do oznaczania właściwości nawigacji jak linki, które zezwalają na zero, może powodować różnego rodzaju problemy, jak i podczas migracji, i zacznie wymieniać niezerowe FK na zero-zdolne. Aby uczcić te linki jako nieprawidłowe i zrobić EF szczęśliwy:
public class PostFile {
public Int32? UserId{ get; set; }
public Int32? PostId { get; set; }
public virtual User? User { get; set; }
public virtual Post? Post { get; set; }
}
Że prawie na pewno nie to, co chcesz w swojej domenie, lub nawet legalne, jeśli identyfikator użytkownika i identyfikator postID są częścią KOMPUTERA.
Osobiście zaznaczam to zmiana w C# jak "minę" MS, początkowo który jest domyślnie włączony, na przykład, ocenę po stronie klienta w EF. :)
Przewiduję wiele pytań StackOverflow, związanych z tym ostrzeżeniem lub krytyczne zmianami, i wiele klienckich kodowych baz, usiany tagiem przebaczenie"!", ponieważ stare obiekty/linki, nie zdolne do zera, są przekazywane w kod z walidacji linków na zero.