2009-11-13 8 views
0

J'ai la table A et la table B.
Le tableau B contient deux colonnes, Nom et ID. Le tableau A contient plusieurs colonnes et une colonne de clé étrangère pointant vers B.ID appelé B_IDLinq to SQL insérer/sélectionner des enregistrements étrangers/primaires

Du côté client, j'ai toutes les données que je veux insérer dans le tableau A, à l'exception de B_ID. J'ai B.Name cependant. En utilisant link to sql J'ai besoin de récupérer l'identifiant dans la table B en fonction de la valeur de Name. Si l'enregistrement n'existe pas, je dois l'insérer et récupérer l'ID (qui est une colonne d'identité).

Maintenant que j'ai B.ID, je puis d'insérer l'enregistrement dans le tableau A.

J'ai construit ma classe de contexte de données par l'importation de tables A et B dans le concepteur, je ne suis pas sûr comment écrire les instructions linq to sql ici.

Répondre

2

Lors de la construction de votre classe de contexte de données, assurez-vous d'abord mettre en place une association entre le tableau A & Tableau B.

Ce qui suit devrait vous donner une idée de la façon d'insérer ou de mettre à jour un objet du tableau B avec relation de l'enfant à la Table A. Fondamentalement, vous vérifiez pour voir si l'objet B existe. S'il existe, renvoyez son ID. Dans le cas contraire, créer un objet A, ajoutez-le à l'objet B, puis insérez l'objet B. En créant l'objet B, LINQ to SQL insère les informations nécessaires à la fois le tableau A & B.

DataContext db = new DataContext(); 

//Build object A 
ObjectTableA objA = new objA(); 
objA.prop1 = ... 
objA.prop2 = ... 

// Check to see if the object exists in Table B 
var query = from b in db.TableB 
     where b.Name == name 
     select b; 

ObjectTableB objb = query.FirstOrDefault(); 

//if objb does not exist then create and insert a new object B 
if (!objb) { 
objB = new ObjectTableB(); 
objB.Name = name; 

//add objA 
objB.propA = objA; 
db.TableB.InsertOnSubmit(objB); 
db.SubmitChanges(); 
} 

return objB.ID;