2009-10-25 4 views
0

Ceci est ma première visite à LINQ to SQL. Je crée mon dbml dans le concepteur à l'aide d'une base de données SQL Server Express. Je crée une procédure stockée appelée StoredProcedure1, que j'ai également déplacée dans le dbml. Ensuite, j'ai écrit du code pour tester si je pouvais mettre à jour certains des champs. Le problème est qu'aucune mise à jour ne se produit dans la base de données, mais je vois les modifications lorsque les données sont liées à un DataGrid. Je n'ai aucune idée pourquoi ça ne marche pas ou ce que je fais mal. Voici le code:Linq2SQL: Pourquoi le datacontext ne met-il pas à jour la base de données

DataClasses1DataContext data = new DataClasses1DataContext(); 
List<StoredProcedure1Result> result = new List<StoredProcedure1Result>(data.StoredProcedure1()); 


int i = 0; 
foreach (StoredProcedure1Result r in result) 
{ 
    r.TestField = "A" + i.ToString(); 
    i++; 
} 

// to see what has changed, set break point on next line 
var changeSet = data.GetChangeSet(); 

// submit changes and show result in datagrid 
data.SubmitChanges(); 
dataGrid.ItemsSource = result; 

La procédure stockée saisit simplement tous les enregistrements d'une table:

USE [E:\test\test.MDF] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
CREATE PROCEDURE [dbo].[StoredProcedure1] 
AS 
    SELECT * FROM TEST_TABLE 
    RETURN 
+0

Je suis confus par votre question. Que fait exactement la procédure stockée? Que contiennent les "changements" après leur affectation? Autant que je sache, votre contexte de données ne sait rien de "résultat", donc changer "résultat" et ensuite appeler SubmitChanges sur le contexte de données ne fait probablement rien, ce qui explique peut-être le comportement que vous voyez. –

+0

Si vous obtenez des données en utilisant une procédure stockée, je vous suggère également de mettre à jour les données en utilisant une procédure stockée différente. Sinon, LinqToSql pour la récupération et la mise à jour des données de base est beaucoup plus simple sans utiliser de procédures stockées du tout. Il est possible de faire ce que vous faites et j'espère que quelqu'un vous fournira une réponse appropriée si c'est ce dont vous avez réellement besoin. –

+0

J'ai mis à jour ma question avec la procédure stockée que j'utilise. Il récupère simplement tous les enregistrements de la base de données. "changes" devrait contenir ce qui a changé, mais 0 UPDATES sont affichés. Je ne comprends pas ce que vous voulez dire par datacontext ne sait rien sur "résultat"? Je fais quelque chose de mal quand j'exécute data.StoredProcedure1()? –

Répondre

0

I figured it out. Dans le concepteur LINQ2SQL, définissez le type de retour de StoredProcedure1 sur TEST_TABLE au lieu de générer automatiquement.

0

Eh bien, si vous ne savez pas ce que vous faites mal, vous pourriez probablement essayer quelque chose plus simple, comme une requête de sélection classique sur certains objets existants dans la base de données, mettez à jour certains champs et submitChanges(). Ensuite, vous pouvez construire sur votre exemple en liant votre grille aux résultats renvoyés par votre select, et appelez SubmitChanges() dans le gestionnaire d'événements correct de la grille.

+0

C'est l'une des premières choses que j'ai faites. L'utilisation d'une requête LINQ a fonctionné dès le départ. Maintenant, je passe à travailler avec une procédure stockée. –

0

Vous devez directement modifier les enregistrements de la base de données via LinqToSql. La modification des résultats que vous avez récupérés de la procédure stockée ne mettra pas à jour la base de données.

Essayez quelque chose comme ça, au lieu d'appeler la procédure stockée:

var result = data.TEST_TABLES(); 
Questions connexes