這是我第一次參加LINQ to SQL。我使用SQL Server Express數據庫在設計器中創建我的dbml。我創建了一個名爲StoredProcedure1的存儲過程,我也將其拖入dbml中。然後我寫了一些代碼來測試是否可以更新一些字段。問題是沒有更新發生到數據庫,但我看到數據綁定到DataGrid時的更改。我不知道爲什麼它不工作或我做錯了什麼。下面是代碼:Linq2SQL:爲什麼沒有datacontext更新數據庫
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可能不會做任何事情,這可能解釋了你所看到的行爲。 – 2009-10-25 12:18:24
如果您使用存儲過程獲取數據,我建議您還使用其他存儲過程更新數據。否則,LinqToSql基本的數據檢索和更新非常簡單,根本不需要使用存儲過程。有可能做你正在做的事情,希望有人會給你一個正確的答案,如果這是你真正需要的。 – 2009-10-25 14:24:36
我用我正在使用的存儲過程更新了我的問題。它只是抓取數據庫中的所有記錄。 「更改」應該包含已更改的內容,但會顯示0個更新。我不明白你的意思datacontext不知道什麼「結果」?我在運行data.StoredProcedure1()時做錯了什麼? – 2009-10-25 14:38:54