2009-12-30 5 views
0

Je souhaite créer des relations dans ma base de données SQL Server à l'aide de C#.Création de relations de table dans SQL Server via C#

Je possède ce code:

foreach (ForeignKey fk in table.ForeignKeys) 
       { 
        if (!table.ForeignKeys.Contains("ProductMaterial")) 
       } 

       table.ForeignKeys.Add(
        new ForeignKey(
         new Table(database, 
            "ProductMaterial"), 
            "ProductMaterial")); 
       DataRelation relation = new DataRelation(
         "ProductMaterial", new DataColumn(),) 

« table » est d'une collection de tableaux dans la base de données et la base de données provient d'une collection dans l'instance de serveur de bases de données. J'ai le renversement de condition parce que je veux ajouter une relation évidemment là où on n'existe pas alors je cherche l'absence d'un FK.

Cependant, j'ai aussi la ligne DataRelation. Est-ce que je peux juste ajouter un FK et ce sera la relation? Ou devrais-je ajouter à la fois un FK et un objet de datarelation?

Merci

Répondre

1

Tout d'abord, pour être clair (et nous espérons que vous le savez déjà), ce code ne crée rien dans la base de données ... Tout ce que vous affectez est la structure et les relations entre les tables dans l'objet DataSet ADO.Net, qui existe seulement en mémoire dans l'espace de processus que vous utilisez ce code dans.

cela dit, ajoutant que la clé étrangère établit une contrainte . Cela signifie qu'il empêche l'ajout de nouveaux enregistrements à ce dataTable avec des valeurs dans le champ FK qui n'existent pas dans l'autre table. Ce n'est pas la même chose que d'ajouter une relation. Une relation établit la chose parent-enfant (redondante pour l'appeler une relation ici) qui permet à d'autres objets .Net comme des grilles, etc., de rendre les données de manière hiérarchique.

Alors oui, si vous voulez les deux, vous devez ajouter les deux.

+0

Merci. Ouais je suis conscient que cela ne persiste pas les changements à la DB. J'ai omis le code qui n'est pas immédiatement pertinent au problème et donc coupé cela (ainsi que le code pour obtenir la bonne base de données). – dotnetdev

+0

kewl ,, la première phrase en question m'a conduit à mentionner ce point explicitement, désolé d'être pédant ... –

+0

Aucun problème, j'aurais dû préciser que je suis en train d'omettre le code de toute façon. – dotnetdev

Questions connexes