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
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. –
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. –
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()? –