Pergunta

Este é o meu primeiro ir em LINQ to SQL. Eu crio o meu dbml no designer usando um banco de dados SQL Server Express. Eu criar um procedimento armazenado chamado StoredProcedure1, que eu também arrastado para o dbml. Então eu escrevi algum código para testar se eu pudesse atualizar alguns dos campos. O problema é que há atualizações ocorrem ao banco de dados, mas eu ver as alterações quando os dados são ligados a um DataGrid. Eu não tenho idéia por que ele não está funcionando ou o que estou fazendo de errado. Aqui está o 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;

O procedimento armazenado apenas agarra todos os registros de uma tabela:

    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
Foi útil?

Solução 3

Eu percebi isso. No designer LINQ2SQL, defina o tipo de retorno para StoredProcedure1 para TEST_TABLE em vez de auto-gerado.

Outras dicas

Bem, se você não tem idéia do que você está fazendo errado, provavelmente você pode tentar algo mais simples, como uma consulta seleção clássico sobre alguns objetos existentes no banco de dados, atualizar alguns campos e SubmitChanges (). Então você pode construir em seu exemplo ligando a sua grade com os resultados retornados por sua seleção, e SubmitChanges de chamadas () no manipulador de eventos correta da grade.

Você deve alterar diretamente os registros do banco de dados através LinqToSql. Alterando os resultados que você recuperado do procedimento armazenado não irá atualizar o banco de dados.

Tente algo como isso, em vez de chamar o procedimento armazenado:

var result = data.TEST_TABLES();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top