2009-06-23 8 views
6

Estoy usando DataSet para conectar mi programa C# con la base de datos SQL. Quiero que una de las columnas sea una enumeración y quiero que actúe como una enumeración en mi código. ¿Cómo puedo hacer esto?Enum en el conjunto de datos

Respuesta

8

No me refiero a estallar la burbuja de todos, pero puede asignar fácilmente un número entero a un Enum utilizando un conjunto de datos fuertemente tipado. Lo hago todo el tiempo. En lugar de escribir todo aquí, he creado un entry on my Blog que describe en detalle cómo lograr esto.

+0

Thaks, eso es exactamente lo que quería. – svick

+0

+1 Buen trabajo haciendo esa prueba de concepto. Sabía que era posible con un conjunto de datos tipeados. Sin embargo, con este enfoque, ¿no tendrá que volver a hacer el cambio en el archivo xsd cada vez que realice algún cambio en el conjunto de datos, ya que el diseñador de conjuntos de datos tipeados pisa fuerte el xsd? – James

+0

Sí, el xsd será destruido, lo cual es problemático. Es de esperar que el uso de tipos de enumeración personalizados en los conjuntos de datos sea moderado, y el mantenimiento se minimizará. Sin embargo, prefiero tratar directamente con el tipo de enumeración en lugar de tener que enviar y recibir un número entero. Solo hay unos pocos lugares donde hacemos esto, y esos conjuntos de datos cambian raramente, por lo que el impacto es mínimo.Si vas a cambiar mucho tus conjuntos de datos, el dolor aumentará sustancialmente :( – Josh

0

No creo que puedas. SQL Server no tiene un concepto de enumeraciones.

+0

No me importa cómo se representará en el databse. Puede ser int o cadena allí. – svick

+0

Tienes que importarle. Una cosa que no puedes representar en la base de datos es una enumeración. –

+0

Odio estar en desacuerdo, pero una enumeración puede ser fácilmente representada por una tabla de búsqueda que tiene una ID y un Nombre. Esto se hace mucho, especialmente si usted sabe que la tabla de búsqueda solo cambiará cuando cambie la enumeración en el código. – Josh

0

Sugeriría utilizar una capa ApplicationService que se encuentra encima de su capa de repositorio. Luego, en su clase ApplicationService (piense en el nombre apropiado para esta clase) puede transformar los datos que se devuelven de la capa del repositorio al valor enum apropiado en su objeto POCO.

0

Puede intentar con un strongly typed dataset.

+0

¿Cómo ayudaría esto con una enumeración? –

+0

Puede usar esta construcción para alterar/agregar uno de los tipos de datos de columnas al tipo de su enumeración personalizada. siempre que los valores db numéricos que lo llenan estén en el alcance de la enumeración, creo que podría funcionar. Esto requeriría agregar una clase parcial o modificar la generada. – James

+0

Incluso suponiendo que esto funcione, es un problema de mantenimiento, ya que ahora tiene varias definiciones de lo que es válido en esa columna. Además, me sorprenderé al descubrir que ADO.NET realizará implícitamente un molde que no podría hacer en el código: MyEnum e = 1; no compilará –

0

Técnicamente no se puede. Los de Enum son de tipo estático, están diseñados para usarse cuando conoce todos los valores en tiempo de compilación. Si bien hay algunos problemas, le recomiendo que no haga esto.
Mire un conjunto de datos no modificable, esto le dará la mayoría de los beneficios de un Enum y se puede crear sobre la marcha.

Si bien los datos no se pueden almacenar como Enum, se pueden usar como filtros de fantasía siempre que los datos en la columna de la base de datos sean de tipo entero. Esa es una pregunta completamente diferente si eso es lo que buscas. Vaya al MSDN page y lea en Enum.

Cuestiones relacionadas