2010-07-16 4 views
0

Mon titre est peut-être légèrement éteint mais voici ce que j'essaie de faire. J'ai une méthode L2S qui serait pour chaque table que je voudrais écrire une fois. Ceci est de définir une colonne de verrouillage soft où j'aurai également besoin d'une méthode Read et UnLock. Voici ce que j'ai jusqu'à présent:Méthode SQL LINQ 2 pour toutes les tables

public static void LockRow(string TableName, int TablePrimaryKey) 
    { 
     using (var context = McpDataContext.Create()) 
     { 
      var tableToLock = (from lockTable in context.tblPlans 
           where lockTable.PlanID == TablePrimaryKey 
           select lockTable).Single(); 

      tableToLock.Locked = true; 
      context.SubmitChanges(); 
     } 
    } 

Ce que je voudrais faire est de remplacer context.tblPlans avec context.TableName. Est-ce possible dans LINQ? Comment? Je suis en train d'assouvir que je vais à ce sujet dans le mauvais sens, donc je serais reconnaissant pour certaines directions/pointeurs.

Merci

Répondre

1

Mise à jour car le premier exemple ne fonctionnerait pas.

Vous pouvez le faire avec une méthode générique et une interface:

public interface IPlanTable 
{ 
    int PlanID { get; set; } 
} 

public static void LockRow<TEntity>(int TablePrimaryKey) where TEntity : class, IPlanTable 
{ 
    using (var context = McpDataContext.Create()) 
    { 
     var tableToLock = (from lockTable in context.GetTable<TEntity>() 
          where lockTable.PlanID == TablePrimaryKey 
          select lockTable).Single(); 

     tableToLock.Locked = true; 
     context.SubmitChanges(); 
    } 
} 

Vous devrez aussi utiliser le fait que les tables Linw2SQL sont créées en tant que classes partielles pour les étendre si toute la table relevent mettre en œuvre IPlanTable

Vous utiliseriez comme ci-dessous:

LockRow<tblPlan>(23); 

remplacer simplement tblPlan avec quel que soit le nom de votre onglet le cours est.

Cependant, cela ne vous permettra pas de définir la table lors de l'exécution, LinqToSQL est orienté objet et type sécurisé, en spécifiant la table que vous voulez récupérer est contraire à la façon dont il a été conçu pour fonctionner.

+0

Mais cela me permettrait de l'utiliser pour plusieurs tables au moment du design, correct? –

+0

question stupide mais quel est un exemple de ce que je mettrais pour 'TEntity'? –

+0

hmm, en y réfléchissant, vous devrez probablement concevoir une interface et l'appliquer à toutes vos tables, hanf je mettrai à jour la réponse –

Questions connexes