Mi requisito es crear un Enum basado en los valores presentes en una tabla de DB. Estoy usando el modelo ADO.NET Entity Framework (archivo .edmx). ¿Puede alguno de ustedes ayudarme?Generar Enum a partir de los valores presentes en una tabla utilizando el marco de Entidad ADO.NET
Generar Enum a partir de los valores presentes en una tabla utilizando el marco de Entidad ADO.NET
Respuesta
Probablemente sea mucho más fácil usar plantillas T4. Here is a really good article on getting started
Mi ejemplo a continuación usa una conexión SQL directa, pero como puede ver, puede incluir cualquier código y generar el resultado que desee en un archivo cs compilado en su proyecto. Puede reemplazar la sintaxis de ADO a continuación con una enumeración sobre una colección de objetos recuperados a través de su modelo de Entituy Framework y publicarla en consecuencia.
Cree un archivo con la extensión .tt en el directorio donde desea que se genere el archivo de enumeración. Si nombra el archivo XXXXX.tt, se generará un archivo llamado XXXXX.cs, así que nombre el archivo tt de manera apropiada.
Pruebe algo en esta línea. Es posible que necesite experimentar un poco con la sintaxis y la salida, pero no voy a escribirlo todo para usted o no aprenderá nada :)
Solo tenga en cuenta que esta llamada a la base de datos se realizará cada vez que edite el archivo tt.
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#
SqlConnection sqlConn = new SqlConnection(@"Data Source=XXXX;Initial Catalog=XXXX; Integrated Security=True");
sqlConn.Open();
#>
namespace AppropriateNamespace
{
public enum YourEnumName
{
<#
string sql = string.Format("SELECT Id, Name FROM YourTable ORDER BY Id");
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
IDataReader reader = sqlComm.ExecuteReader();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
while (reader.Read())
{
sb.Append(FixName(reader["Name"].ToString()) + " = " + reader["Id"] + "," + Environment.NewLine + "\t\t");
}
reader.Close();
sqlComm.Dispose();
#>
<#= sb.ToString() #>
}
}
Intente mejorar esto. En lugar de escribir en StringBuilder, muestra los resultados de cada lector. Lee() directamente en el resultado. Además, he incluido un método FixName que aún no existe, pero es posible que lo necesite para eliminar espacios o caracteres ilegales.
plantilla de Daniel es agradable y todo, pero me he puesto un poco más de esfuerzo en such a template lo que hace todo esto:
- genera valores de enumeración con valores enteros explícitas;
- utiliza la convención de nomenclatura del espacio de nombres de Visual Studio para que las enumeraciones generadas tengan el espacio de nombres predeterminado del proyecto con cualquier subcarpeta agregada (como cualquier archivo de código en Visual Studio);
- agrega la documentación XML de enumeración completa mediante el uso de valores de columna de la tabla de descripción adicional; si no los tienes, no te preocupes;
- nombra correctamente el archivo generado y agrega un atributo adicional en el código para que
enum
no se analice mediante el análisis de código; - los valores de la tabla de búsqueda de palabras múltiples se concatenan correctamente a los equivalentes pascal-casados (es decir, valor de palabra múltiple se convierte en
MultiWordValue
); - los valores de enumeración siempre comienzan con una letra;
- todos los valores de enumeración consisten en solo letras y números, todo lo demás se corta;
De todos modos. Todo está muy bien documentado en this blog post.
Excelente. Buen seguimiento –
- 1. Actualización de la tabla primaria con el marco de la entidad ado.net con los servicios del dominio
- 2. Agregar métodos a un modelo utilizando el marco de entidad
- 3. dependencia circular en el marco de entidad
- 4. ¿Cómo se actualiza una tabla con una clave externa a otra tabla en el modelo de entidad ADO.Net?
- 5. Ado.Net modelo de entidad de datos que no actualiza correctamente
- 6. ¿Cómo puedo agregar restricciones a una entidad ADO.NET?
- 7. Enum como clave en el marco de la entidad 5 error de lanzamiento en muchas combinaciones
- 8. Genera una tabla HTML a partir de una matriz de valores hash en Ruby
- 9. bucle a través de los valores enum
- 10. Exponer propiedades de enumeración escrito para los campos entidades marco entidad de contexto de cliente de servicio de datos ADO.NET
- 11. "Ordenar por Col1, Col2" utilizando el marco de entidad
- 12. Generar paleta de colores a partir de una imagen
- 13. ¿Usa una tabla para proporcionar valores enum en MySQL?
- 14. Mapeo de Ingreso mesas en el marco de la entidad
- 15. asignación de varias tablas a una única clase de entidad en el marco de la entidad
- 16. Pasar parámetro de tabla de valor utilizando ADO.Net
- 17. distintas en el marco Entidad
- 18. Cómo invocar eficientemente parámetros con valores de tabla desde Ado.Net
- 19. ¿Poner los valores ENUM a android spinner?
- 20. Unión en el marco de la entidad
- 21. Cómo se relacionan los objetos de múltiples contextos utilizando el marco de la entidad
- 22. Generar archivo XML a partir de los datos del modelo
- 23. Marco de Entidad Marco de muchos a muchos, clúster frente a índice no agrupado
- 24. ¿Cómo generar una lista UL Li a partir de una matriz de cadenas utilizando jquery?
- 25. Actualización de una referencia a un objeto secundario en el marco de la entidad 4.1 (CodeFirst)
- 26. Filtrar la "Incluye" tabla de la Entidad consulta marco
- 27. Generar índices de tabla utilizando Fluiber NHibernate
- 28. marco de la entidad nombres de tabla autogenerado
- 29. ¿Es posible hacer referencia directa a una tabla de muchos a muchos utilizando el marco de entidades, primero el código
- 30. Cómo devolver un valor Enum a partir de una cadena?
No conozco la plantilla T4 de wat .. –
Actualmente estoy buscando un enlace útil –
De acuerdo ... Gracias ... –