Se ho un modello con una chiave di tipo Guid
, è una cattiva pratica impostare l'ID esplicitamente nel costruttore?
So che sarà impostato implicitamente da Entity Framework, ma succederà qualcosa di brutto (forse il rendimento saggio) impostandolo esplicitamente?
Esempio:
class MyModel
{
public MyModel()
{
Id = Guid.NewGuid();
}
[Key]
public Guid Id { get; set; }
}
Sto pensando che un Guid
sia supportato da un ID sequenziale nel server SQL e, se imposto un valore in modo esplicito, suppongo che diminuirò le prestazioni dell'indicizzazione perché non sarà più sequenziale?
Non sono stato in grado di trovare una risposta su questo e sono molto curioso al riguardo.
Vedo un difetto di progettazione piuttosto che un problema di prestazioni: i modelli non dovrebbero generare il loro id
. È fuori dalla loro responsabilità. I repository lo fanno nel metodo Add
.
Guid
può essere generato in molti modi: ad esempio, può essere casuale o sequenziale. Esistono diversi algoritmi per generarli in entrambi i modi. Pertanto, stai chiudendo le tue scelte a una sola.
E stai forzando il momento in cui viene assegnato l' id
del modello: non puoi volerlo per ritardare il suo incarico fino a quando il modello potrebbe aver bisogno di essere persistito. Ad esempio, uno zero Guid
può essere utile sapere che qualche modello non è ancora persistente.