2009-09-03 7 views
0

Disons que j'ai deux tables une appelée Customers et une appelée CustomerAddresses. Puis disons que j'ai un objet Client qui contient une propriété de type List<Address>. Cette propriété contient une liste des différentes adresses de livraison qu'un client peut avoir utilisées, il peut donc contenir des adresses 0-n (une seule chaîne avec l'adresse complète pour des raisons de simplicité). Maintenant, j'ai une collection d'objets Client que je veux charger dans ces deux tables avec une procédure linq to sql. La table Customers a une colonne appelée CustomerID qui est une colonne d'identité et devrait s'auto-incrémenter. La table CustomerAddresses a une colonne appelée CustomerID (et une colonne appelée Address également) qui connecte les clients à l'adresse (s) dans la table. Je pense que ma principale difficulté ici est de comprendre comment ajouter une liste aux tables et faire correspondre les colonnes CustomerID.Ajout d'éléments à plusieurs tables avec linq à sql

Merci à l'avance,

Bob

Répondre

1

Je pense que c'est ce dont vous avez besoin. J'ai nommé CustomerAddresses la propriété que vous avez dans votre objet client et détient la liste des adresses.

static void SaveCustomer(Customer customer) 
{ 
    using(var dc = new TestDC()) 
    { 
     dc.Customers.InsertOnSubmit(customer); 
     dc.SubmitChanges(); 

     foreach (CustomerAddress address in customer.CustomerAddresses) 
     { 
      address.CustomerId = customer.Id; 
      dc.CustomerAddresses.InsertOnSubmit(address); 
      dc.SubmitChanges() 
     } 
    } 
} 

Et oui, vous devriez mettre un FK entre ces tables, bien que ce ne soit pas obligatoire.

+0

Merci, je pense que c'est ce dont j'ai besoin. Je vais essayer et ajouter des questions qui pourraient venir. Merci encore. Bob – Beaker

2

Vous ajoutez les lignes des clients (InsertOnSumbit), puis activer la fonction SubmitChanges() qui met à jour des objets que vous inséré le client avec un ID nouvellement généré.

using(var dc = new TestDC()) 
{ 
    var cust = new Customer(); 

    cust.Name = "Jack"; 

    dc.InsertOnSubmit(cust); 

    SubmitChanges(); // cust.Id will be updated with a new generated value 
} 

BTW, Vous pouvez entourer ce code avec TransactionScope pour un support transactionnel.

Profitez-en.

+0

Comment linq to sql sait quelle colonne placer la liste des chaînes d'adresses dans l'autre table? Une clé étrangère doit-elle être établie entre les deux tables? – Beaker

+0

Mon exemple consiste à ajouter une nouvelle ligne à une table orientée vers l'identité. Vous ne devez pas représenter la liste comme un type de colonne sur SQL, ne l'autorisant pas ainsi dans LINQ. Vous devriez avoir un objet BL appelé CustomerBL qui sera rempli par 2 tables (Customer & CustomerAddresses). CustomerBL consistera en une liste d'adresses pouvant être remplies à partir de la table CustomerAddresses (ses colonnes seront: CustomerAddressId (PK int), CustomerId (PK int), Address (chaîne)). –

+0

Peut-être que mon problème est la configuration de ces tables et des objets de la couche de gestion. – Beaker

Questions connexes