2009-06-23 14 views
6

Sto utilizzando DataSet per connettere il mio programma C# con il database SQL. Voglio che una delle colonne sia un'enumerazione e voglio che faccia da enum nel mio codice. Come posso fare questo?Enum in DataSet

risposta

8

Non intendo far scoppiare la bolla di tutti, ma è possibile mappare facilmente un intero ad un Enum utilizzando un DataSet Strongly Typed. Lo faccio tutto il tempo. Piuttosto che digitare il tutto qui ho creato un entry on my Blog che descrive in dettaglio come ottenere ciò.

+0

Thaks, è esattamente quello che volevo. – svick

+0

+1 Bel lavoro facendo quel proof-of-concept. Sapevo che era possibile con un set di dati digitato. Con questo approccio, tuttavia, non dovrai ripetere la modifica del file xsd ogni volta che apporti modifiche al set di dati poiché xsd verrà calpestato dal designer del set di dati tipizzato? – James

+0

Sì, il xsd sarà sbalordito, il che è problematico. Si spera che l'utilizzo di tipi di enum personalizzati nei set di dati risparmi e la manutenzione sia ridotta al minimo. Tuttavia, preferisco di gran lunga gestire il tipo di enum direttamente piuttosto che dover eseguire il cast avanti e indietro su un numero intero. Ci sono solo pochi posti in cui lo facciamo, e quei set di dati cambiano raramente, quindi l'impatto è minimo.Se cambierai molto i tuoi set di dati, il dolore aumenterà considerevolmente :( – Josh

0

Non penso che tu possa. SQL Server non ha un concetto di enumerazione.

+0

Non mi interessa come sarà rappresentato nel databse. Può essere int o stringa lì. – svick

+0

Devi preoccuparti. Una cosa che non puoi rappresentare nel database è un enum. –

+0

Odio non essere d'accordo, ma un enum può essere facilmente rappresentato da una tabella di ricerca che ha un ID e un Nome. Questo è fatto molto, specialmente se si sa che la tabella di ricerca cambierà solo quando l'enum nel codice cambia. – Josh

0

Suggerirei di utilizzare un livello ApplicationService che si trova in cima al livello del repository. Quindi nella classe ApplicationService (si pensi al nome appropriato per questa classe) è possibile trasformare i dati restituiti dal livello repository al valore enum appropriato nell'oggetto POCO.

0

Si potrebbe provare a utilizzare uno strongly typed dataset.

+0

In che modo questo può aiutare con un enum? –

+0

È possibile utilizzare questo costrutto per modificare/aggiungere uno dei tipi di dati delle colonne al tipo dell'enumerazione personalizzata. Finché i valori numerici di db che lo compongono rientrano nello scopo dell'enum, credo che potrebbe funzionare. Ciò richiederebbe l'aggiunta di una classe parziale o la modifica di quella generata. – James

+0

Anche supponendo che questo funzioni, si tratta di un problema di manutenzione, poiché ora esistono più definizioni di ciò che è valido in quella colonna. Inoltre, sarò sorpreso di scoprire che ADO.NET eseguirà implicitamente un cast che non è possibile fare nel codice: MyEnum e = 1; non verrà compilato. –

0

Tecnicamente non è possibile. Gli Enum sono tipizzati staticamente, sono progettati per essere utilizzati quando si conoscono tutti i valori al momento della compilazione. Mentre ci sono alcuni work-around, ti consiglio vivamente di non farlo.
Guardare un insieme di dati non modificabile, questo darà la maggior parte dei benefici di un Enum e può essere creato al volo.

Mentre i dati non possono essere memorizzati come Enum, possono essere utilizzati come filtri di fantasia purché i dati nella colonna del database siano di un tipo intero. Questa è una domanda completamente diversa se è quello che stai cercando. Vai allo MSDN page e leggi su Enum's.