Ho il seguente scenario:
Classe di colore
public int ID
{
get;
set;
}
public string Name
{
get;
set;
}
public string Hex
{
get;
set;
}
Classe Widget
public int ID
{
get;
set;
}
public int HeaderBackgroundColorID
{
get;
set;
}
public Color HeaderBackgroundColor
{
get;
set;
}
Usando Code-First, sto cercando di creare una relazione unidirezionale tra le classi Widget to Colour con i campi HeaderBackgroundColor / HeaderBackgroundColorID .
normalmente lo farei nella classe di configurazione:
this.HasOptional(r => r.HeaderBackgroundColor )
.WithMany(m => m.Widgets)
.HasForeignKey(fk => fk.HeaderBackgroundColorID);
ma non sono interessato ad aggiungere una collezione di widget alla classe Color. provato questo:
this.HasOptional(r => r.HeaderBackgroundColor )
.WithMany()
.HasForeignKey(fk => fk.HeaderBackgroundColorID);
ma questo genera un errore di convalida.
Qual è il modo di fare questo giusto?
Si sta verificando un errore perché HeaderBackgroundColorId
è un int
non nullable, quindi non può essere facoltativo.
Tutto quello che devi fare per ottenere ciò che stai cercando è trasformare la chiave esterna in un valore nullable int
...
public int? HeaderBackgroundColorID { get; set; }
Poiché hai nominato la chiave esterna per abbinare la proprietà di navigazione ( HeadBackgroundColorId
e HeaderBackgroundColor
) che segue le convenzioni Code First, non è necessario creare alcun mapping esplicito. Semplicemente facendo il cambiamento di cui sopra renderà la relazione opzionale.