Pregunta

Esta es mi primera vez en LINQ to SQL. Creo mi dbml en el diseñador utilizando una base de datos de SQL Server Express. Creo un procedimiento almacenado llamado StoredProcedure1, que también arrastré al dbml. Luego escribí un código para probar si podía actualizar algunos de los campos. El problema es que no se producen actualizaciones en la base de datos, pero veo los cambios cuando los datos están vinculados a un DataGrid. No tengo idea de por qué no funciona o de lo que estoy haciendo mal. Aquí está el código:

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;

El procedimiento almacenado simplemente toma todos los registros de una tabla:

    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
¿Fue útil?

Solución 3

Lo descubrí. En el diseñador LINQ2SQL, establezca el tipo de retorno para StoredProcedure1 en TEST_TABLE en lugar de autogenerado.

Otros consejos

Bueno, si no tiene idea de lo que está haciendo mal, probablemente podría intentar algo más simple, como una consulta de selección clásica en algunos objetos existentes en la base de datos, actualizar algunos campos y submitChanges (). Luego, puede basarse en su ejemplo vinculando su Cuadrícula con los resultados devueltos por su selección y llamando a SubmitChanges () en el controlador de eventos correcto de la cuadrícula.

Debes cambiar directamente los registros de la base de datos a través de LinqToSql. Cambiar los resultados que recuperó del procedimiento almacenado no actualizará la base de datos.

Intente algo como esto, en lugar de llamar al procedimiento almacenado:

var result = data.TEST_TABLES();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top