2009-09-24 3 views
4

Est-il possible que je puisse ajouter Table<T> dynamiclly à une instance DataContext existant dans LinqToSQL?C# ajouter un tableau <T> dans une instance DataContext existante

Voici mon cas: J'ai plusieurs classsed qui utilisent l'attribut [Test] pour déclarer comme Table, je veux permettre à l'utilisateur de créer les tables SQL Server correspondantes pendant l'exécution. Je comprends que si j'hérite de la classe DataContext, je peux ajouter un membre Clients de table; dans la classe et il créera automatiquement une telle table à la base de données backend. Cependant, le problème est que je peux ajouter Table pendant l'exécution à une classe DataContext qui m'aide à créer la table SQL Server correspondant correspondant à T.

+0

Que voulez-vous dire? Ajouter la table à la base de données? Ajouter une représentation d'une table de base de données déjà existante? Ajouter un objet Table en mémoire uniquement? – Konamiman

Répondre

1

Je ne pense pas que ce soit possible. Linq2Sql lit les métadonnées de vos attributs et les stocke dans un cache - pour toutes les instances de votre contexte.

La seule chance que vous avez est de générer ces classes en mémoire, puis de les émettre dans un nouveau AppDomain. Cela semble dur, mais ce n'est pas le cas. Mais comment voulez-vous accéder à ces classes? Réflexion?

0

Vous pouvez simplement appeler GetTable <T>(); sur le DataContext. Il va lire les attributs sur T à ce moment-là.

0

Il est certainement possible d'ajouter des tables générées lors de l'exécution au dbml. Si vous ouvrez le fichier dbml dans un éditeur de texte, vous pouvez voir que dbml contient la définition de la colonne. Lors de l'exécution, vous pouvez générer dynamiquement ce fichier avec les nouveaux champs de la table et ajouter ce dbml au fichier de projet .csproj. Cela générera automatiquement les classes de concepteur.

<Table Name="dbo.VijaysToDos" Member="VijaysToDos"> 
    <Type Name="VijaysToDo"> 
     <Column Name="id" Type="System.Int32" DbType="Int NOT NULL" IsPrimaryKey="true" CanBeNull="false" /> 
     <Column Name="column1" Type="System.String" DbType="VarChar(255)" CanBeNull="true" /> 
     <Column Name="column2" Type="System.String" DbType="VarChar(255)" CanBeNull="true" /> 
     <Column Name="column3" Type="System.String" DbType="VarChar(255)" CanBeNull="true" /> 
     <Column Name="last_Updated" Type="System.DateTime" DbType="DateTime" CanBeNull="true" /> 
    </Type> 
</Table> 
Questions connexes