2010-09-21 3 views
1

J'ai le code suivant:Get LINQ to SQL pour enregistrer dans la base de données

// Get the current user 
_currentUser = WindowsIdentity.GetCurrent(); 

// Get the list of address for the current user 
_dataMap = new DataMapDataContext(); 
_addresses = _dataMap.Addresses 
     .Where(address => address.InsertUserName == _currentUser.Name).ToList(); 

....

_addresses.Add(form.Item); 
_dataMap.SubmitChanges(); 

Quand j'appelle SubmitChanges rien est enregistré dans la base de données. Pourquoi donc? Ai-je manqué le point? Je pensais avec linq à sql que vous pourriez simplement ajouter des éléments aux résultats de votre requête, puis appeler SubmitChanges et cela fonctionnera ... Clairement, il me manque quelque chose.

Est-ce que cela fonctionne maintenant si vous utilisez "ToList"? Si non alors comment insérez-vous des choses dans la collection? (Je ne pense pas Ajouter fait partie de IQueryable.)

Répondre

6

N'utilisez _addresses.Add

Vous ne pouvez pas ajouter directement à un IQueryable, vous devez l'ajouter à l'ensemble des entités.

Essayez ceci:

_dataMap.Addresses.InsertOnSubmit(form.Item); 
    _dataMap.SubmitChanges(); 

Bien sûr, je ne vois pas ce que form.Item est, mais il faut savoir qu'il doit être du même type d'entité que les _dataMap.Addresses entité ensemble.

Cela ne fait aucune différence si vous utilisez .ToList(). Avec LINQ-SQL (sauf si vous utilisez une sorte de mappage POCO), vous ne pouvez pas ajouter d'éléments à une collection/requête. Vous devez ajouter l'élément directement dans le jeu d'entités pour le contexte de données spécifié.

Vous pouvez appeler .InsertOnSubmit autant de fois que vous le souhaitez, et .SubmitChanges pousserez tous les INSERT de la DB pour vous.

Plus d'informations sur InsertOnSubmithere.

Questions connexes