Domanda

Questo è il mio primo passaggio a LINQ to SQL. Creo il mio dbml nel designer utilizzando un database SQL Server Express. Creo una procedura memorizzata denominata StoredProcedure1, che ho anche trascinato nel dbml. Quindi ho scritto un po 'di codice per verificare se potevo aggiornare alcuni dei campi. Il problema è che non si verificano aggiornamenti al database, ma vedo le modifiche quando i dati sono associati a un DataGrid. Non ho idea del perché non funzioni o di cosa sto facendo di sbagliato. Ecco il codice:

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 procedura memorizzata prende semplicemente tutti i record da una tabella:

    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
È stato utile?

Soluzione 3

L'ho capito. Nel designer LINQ2SQL, impostare il tipo restituito per StoredProcedure1 su TEST_TABLE invece che generato automaticamente.

Altri suggerimenti

Beh, se non hai idea di cosa stai facendo di sbagliato, probabilmente potresti provare qualcosa di più semplice, come una classica query di selezione su alcuni oggetti esistenti nel database, aggiornare alcuni campi e submitChanges (). Quindi puoi basarti sul tuo esempio vincolando la griglia ai risultati restituiti da select e chiamando SubmitChanges () nel gestore di eventi corretto della griglia.

È necessario modificare direttamente i record dal database tramite LinqToSql. La modifica dei risultati recuperati dalla procedura memorizzata non aggiornerà il database.

Prova qualcosa del genere, invece di chiamare la procedura memorizzata:

var result = data.TEST_TABLES();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top