Penso che tu intenda qualcosa di simile:
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; }
}
Il problema originale è un avvertimento che il C#8 ha introdotto con l'essere più esplicito con null-in grado i tipi di riferimento. Per un'entità, l'implementazione precedente non è valida, a meno che queste relazioni sono, infatti, opzionale, che richiedono il loro FK campi (UserId e PostId) per essere Null-in grado. Si è probabile che non opzionale.
Le principali opzioni per risolvere questo:
A) disattivare la funzione. (Disabilitare null-in grado i riferimenti del progetto)
B) Chiedere "perdono" per il fatto che questi non dovrebbero mai essere nullo, ma non sarà in uno stato valido per la costruzione. (EF sarà la loro gestione)
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!;
}
Alterare il modello di marchio di proprietà di navigazione come null-in grado di riferimenti è probabile che a causare tutti i tipi di problemi con le migrazioni è possibile iniziare a sostituire i non-null in grado FKs con null-capaci. Per contrassegnare questi riferimenti come Null in grado di mantenere EF felice:
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; }
}
Che è quasi certamente non quello che vuoi nel tuo dominio, o anche legale, se UserId e PostId sono parte di un PK.
Personalmente sto sfarinamento questo cambiamento in C# come una "terra mia" di MS inizialmente abilitata per impostazione predefinita, come il Lato Client di Valutazione in EF. :)
Prevedo molti-a-StackOverflow domande intorno a questo avviso o di modifiche di rilievo, e molti-a-client basi di codice disseminato con "!" perdono di tag per anziani non-null in grado di oggetti/riferimenti sono passati in codice con null-in grado di riferimento per i controlli.