【发布时间】:2009-10-25 07:33:56
【问题描述】:
这是我第一次使用 LINQ to SQL。我使用 SQL Server Express 数据库在设计器中创建我的 dbml。我创建了一个名为 StoredProcedure1 的存储过程,我也将它拖到了 dbml 中。然后我写了一些代码来测试我是否可以更新一些字段。问题是数据库没有发生更新,但是当数据绑定到 DataGrid 时我看到了更改。我不知道为什么它不起作用或我做错了什么。代码如下:
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;
存储过程只是从一个表中获取所有记录:
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
【问题讨论】:
-
我对你的问题感到困惑。存储过程到底在做什么?分配后的“更改”包含什么?据我所知,您的数据上下文对“结果”一无所知,因此更改“结果”然后在数据上下文上调用 SubmitChanges 可能不会做任何事情,这可能解释了您所看到的行为。跨度>
-
如果您使用存储过程获取数据,我建议您也使用不同的存储过程更新数据。否则,用于基本数据检索和更新的 LinqToSql 会简单得多,根本不需要使用存储过程。可以做你正在做的事情,如果这是你真正需要的,希望有人会为你提供正确的答案。
-
我用我正在使用的存储过程更新了我的问题。它只是从数据库中获取所有记录。 “更改”应包含已更改的内容,但显示 0 更新。我不明白你所说的数据上下文是什么意思,对“结果”一无所知?我在运行 data.StoredProcedure1() 时做错了什么?
-
这对我来说是全新的,我只是在开始创建更复杂的程序之前尽量保持一切简单。此时,我只想看看我是否可以进行更新。
标签: linq-to-sql stored-procedures datacontext