Considera un ORM che associa le tabelle alle classi e le colonne alle proprietà. Come dovrebbe gestire una proprietà che si associa a una colonna di identità per oggetti non inseriti?
Ad esempio,
[Table("MyTable")]
public class MyMappedType
{
[Column("Id")]
public int Id
{
get
{
// ...
}
}
}
MyMappedType myObj = new MyMappedType();
int id = myObj.Id; // Object not inserted into database so value is missing
Ci sono alcune opzioni differenti,
-
Chiedi al getter della proprietà di lanciare un'eccezione. Questo sembra il più corretto perché se
Id
non è stato assegnato, qualsiasi valore restituito non ha significato. Tuttavia, va contro le linee guida che affermano che i metodi get di proprietà non dovrebbero generare eccezioni. -
Chiedi alla proprietà di restituire un valore speciale, ovvero
0
o-1
. Credo che nella maggior parte degli ORM le proprietà chiave siano inizializzate con il valore predefinito (0
). Tuttavia, questo potrebbe essere fuorviante se c'è una riga nella tabella con il valore della colonna Identity di0
. -
Forza le proprietà dell'ID come tipo
Nullable<int>
in modo che possa restituirenull
fino a quando non viene assegnato il valore.
Quale opzione è la migliore?