Domanda

Abbiamo il nostro proprio ORM usiamo qui, e di fornire fortemente tipizzato wrapper per tutte le nostre tabelle di db.Diamo la possibilità anche debolmente tipizzato SQL ad hoc per essere eseguito, ma queste query ancora passare attraverso la stessa classe per ottenere i valori di un lettore di dati.

Nel tweaking che classe per lavorare con Oracle, abbiamo incontrato una domanda interessante.E ' meglio usare DBNull.Valore null?Ci sono vantaggi di utilizzare DBNull.Valore?Sembra più "corretta", per usare null, da quando ci siamo separati, noi DB mondo, ma ci sono implicazioni (non basta ciecamente ToString() quando un valore è null per esempio) quindi sicuramente qualcosa di cui abbiamo bisogno per prendere una decisione cosciente circa.

È stato utile?

Soluzione

Trovo che sia meglio usare null, invece di DB null.

Il motivo è perché, come hai detto tu, si separa dal DB mondo.

In genere è buona norma controllare i tipi di riferimento per accertarsi che non siano null comunque.Si sta andando ad essere la verifica del valore null per altre cose che i DB, e trovo che sia meglio per mantenere la coerenza tra il sistema e l'uso null, non DBNull.

Nel lungo periodo, architettonicamente, trovo che sia la soluzione migliore.

Altri suggerimenti

Se hai scritto il tuo ORM, quindi direi che basta usare null, dal momento che è possibile utilizzare nel modo che si desidera.Credo DBNull è stato originariamente utilizzato solo per ottenere intorno al fatto che i tipi di valore (int, data e ora, etc.) non poteva essere null, quindi, piuttosto che tornare un po ' di valore come zero o data e ora.Min, che avrebbe implica null (cattiva), hanno creato DBNull per indicare questo.Forse c'era di più, ma ho sempre pensato che fosse il motivo.Tuttavia, ora che abbiamo tipi nullable in C# 3.0, DBNull non è più necessario.Infatti, LINQ to SQL utilizza null in tutto il luogo.Nessun problema a tutti.Abbracciare il futuro...uso di null.;-)

Dall'esperienza che ho avuto, l' .NET Datatable e oggetti tableadapter lavorare meglio con DBNull.Si apre anche un paio di metodi speciali quando fortemente tipizzato, come DataRow.IsFirstNameNull quando in luogo.

Vorrei poter dare una migliore risposta tecnica, ma per me la linea di fondo è utilizzare DBNull quando si lavora con i database di oggetti correlati e quindi utilizzare uno "standard" null quando ho a che fare con gli oggetti e .NET codice.

Utilizzare DBNull.
Abbiamo encouintered un qualche tipo di problemi durante l'utilizzo di null.
Se mi ricordo bene non è possibile INSERIRE un valore null in un campo, solo DBNull.
Potrebbe essere Oracle relative solo, mi dispiace, non conosco i dettagli più.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top