Cred că vrei să spui ceva de genul:
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; }
}
Original problemă este un avertisment că C#8 introdus cu a fi mai explicit cu null-capabil tipuri de referință. Pentru o entitate, mai sus de implementare nu este valabilă decât dacă aceste relații sunt, într-adevăr, opțional, care ar necesita lor FK câmpuri (nume de Utilizator și PostId) să fie, de asemenea, Null-capabil. Ei probabil sunt nu optional.
Principalele opțiuni pentru a adresa aceasta:
A) a dezactiva caracteristica. (Dezactivare null-capabil de referințe în proiect)
B) Cere "iertare" pentru faptul că acestea nu ar trebui să fie nulă, dar nu va fi într-un valabilă de stat în construcții. (EF le va gestiona)
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!;
}
Modificarea model pentru a marca navigare proprietăți ca nul-capabil de trimiteri este de natură să provoace tot felul de probleme ca cu migrații se poate, și va începe înlocuirea non-null-capabil FKs cu null-capabil de cei dragi. Pentru a marca aceste referințe ca Nul-capabil și să păstreze EF fericit:
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; }
}
Care este, aproape sigur, nu ceea ce vrei în domeniu, sau chiar juridice dacă UserId și PostId fac parte dintr-un PK.
Personal am să marchez această schimbare în C# ca un "teren minat" MS activat inițial în mod implicit, cum ar fi Partea de Client de Evaluare în EF. :)
Prevăd multe-o-StackOverflow întrebări în jurul valorii de acest avertisment sau rupere modificări, și multe-un-client codebases presărat cu "!" iertare tag-uri vechi, non-null-capabil de obiecte/referințe sunt trecute în codul cu null-capabil de referință controale.