2010-07-20 15 views
5

Tengo un proyecto donde un cliente puede importar un archivo de Excel, csv o archivo delimitado por tabuladores. Este archivo se carga en una tabla de datos que convierto en una tabla de base de datos SQLite. Preferiría trabajar con objetos fuertemente tipados y tablas de datos. ¿Existe alguna manera de convertir fácilmente la tabla de la base de datos creada en una clase fuertemente tipada utilizando la reflexión? El kicker es que el archivo importado a la aplicación siempre será diferente (es decir, diferentes columnas), así que no puedo codificar realmente ningún objeto fuertemente tipado, siempre tendrá que generarse sobre la marcha.Generar clase de tabla de datos o tabla de base de datos

Respuesta

0

Ryan ya hizo la pregunta correcta y también puedo esperar que el único beneficio de una clase fuertemente tipada sea el diseño o el tiempo de compilación, pero no en tiempo de ejecución.

Quizás quieras después de crear tus tablas SQLlite crear algunas clases de tipos fuertes en otra aplicación que use esta tabla.

En ese caso, probablemente podría echarle un vistazo a T4 - Text Template Transformation Toolkit, porque es capaz de crear clases de tipos fuertes a partir de una consulta, para que pueda utilizar estas clases en tiempo de compilación para otras aplicaciones.

Pero antes de comenzar a usarlo, debe saber que T4 es uno de los best kept Visual Studio secret s. ;-)

2

Puede usar las nuevas características dynamic de C# 4 si eso fuera posible. Más específicamente, el ExpandoObject Class.

ExpandoObject representa un objeto cuyos miembros pueden añadirse dinámicamente y eliminado en tiempo de ejecución.

Usted también tiene DynamicObject Class.

Tome un vistazo a los siguientes enlaces para obtener más información:

Dynamic class creation

Populating and Using Dynamic Classes in C#/.NET 4.0

How do create a Dynamic class in C# 4?

4

En teoría, se podría crear un montaje usando algo como Reflection.Emit, o incluso generando archivos de código y llamando al compilador para construirlos en un ensamblado.

Sin embargo, no estoy seguro de cómo esto podría ser útil. Siempre que el esquema de estas tablas se determine en tiempo de ejecución, cualquier uso de estas clases generadas no podrá usar estas propiedades fuertemente tipadas que haya agregado sin usar el reflejo, y en ese momento usted está tratando esencialmente con algo débilmente tipeado con el rendimiento agregado golpe de reflexión. Los tipos dinámicos en C# 4.0 pueden eliminar el impacto en el rendimiento, pero aún agrega mucha complejidad sin ningún beneficio real.

Cuestiones relacionadas