2010-07-20 5 views
5

J'ai un projet dans lequel un client peut importer un fichier Excel, un fichier csv ou un fichier délimité par des tabulations. Ce fichier est chargé dans une base de données que je convertis en une table de base de données SQLite. Je préfère vraiment travailler avec des objets fortement typés et des datatables. Y a-t-il un moyen de convertir facilement la table de base de données créée en une classe fortement typée en utilisant la réflexion? Le kicker est le fichier importé dans l'application qui sera toujours différent (c'est-à-dire des colonnes différentes) donc je ne peux pas vraiment coder en dur les objets fortement typés, ils devront toujours être générés à la volée.Générer une classe à partir d'une table datatable ou d'une table de base de données

Répondre

0

Ryan a déjà posé la bonne question et je ne peux qu'agréer que le seul avantage d'une classe fortement typée est au design ou à la compilation, mais pas au moment de l'exécution.

Peut-être que vous voulez après avoir créé vos tables SQLlite construit des classes de types forts dans une autre application qui utilise cette table.

Dans ce cas, vous pouvez probablement regarder dans T4 - Text Template Transformation Toolkit, car il est capable de créer des classes de type fort à partir d'une requête, de sorte que vous pouvez utiliser ces classes lors de la compilation pour d'autres applications. Mais avant de commencer à l'utiliser, vous devez savoir que T4 est l'un des best kept Visual Studio secret s. ;-)

2

Vous pouvez utiliser les nouvelles fonctionnalités dynamic de C# 4 si c'était possible. Plus précisément le ExpandoObject Class.

ExpandoObject représente un objet dont les membres peuvent être dynamiquement ajoutés et supprimés à moment de l'exécution.

Vous avez également le DynamicObject Class.

Jetez un oeil sur les liens suivants pour plus d'informations:

Dynamic class creation

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

How do create a Dynamic class in C# 4?

4

En théorie, vous pouvez créer un assemblage en utilisant quelque chose comme Reflection.Emit, ou même en générant des fichiers de code et en appelant le compilateur pour les intégrer dans un assemblage.

Cependant, je ne suis pas sûr de savoir comment cela serait utile. À condition que le schéma de ces tables soit déterminé au moment de l'exécution, toute utilisation de ces classes générées ne pourra pas utiliser ces propriétés fortement typées que vous avez ajoutées sans utiliser de réflexion, et à ce stade, vous devez essentiellement traiter avec quelque chose de faiblement typé avec le coup de performance supplémentaire de la réflexion. Les types dynamiques dans C# 4.0 peuvent éliminer le succès de la performance, mais vous ajoutez encore beaucoup de complexité sans réel avantage.

Questions connexes