2009-10-25 128 views
0

這是我第一次參加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 
+0

我很困惑你的問題。存儲過程究竟在做什麼? 「變更」在分配後包含哪些內容?據我所知,你的數據上下文不知道任何有關「結果」的信息,所以改變「結果」,然後在數據上下文中調用SubmitChanges可能不會做任何事情,這可能解釋了你所看到的行爲。 – 2009-10-25 12:18:24

+0

如果您使用存儲過程獲取數據,我建議您還使用其他存儲過程更新數據。否則,LinqToSql基本的數據檢索和更新非常簡單,根本不需要使用存儲過程。有可能做你正在做的事情,希望有人會給你一個正確的答案,如果這是你真正需要的。 – 2009-10-25 14:24:36

+0

我用我正在使用的存儲過程更新了我的問題。它只是抓取數據庫中的所有記錄。 「更改」應該包含已更改的內容,但會顯示0個更新。我不明白你的意思datacontext不知道什麼「結果」?我在運行data.StoredProcedure1()時做錯了什麼? – 2009-10-25 14:38:54

回答

0

我想通了。在LINQ2SQL設計器中,將StoredProcedure1的返回類型設置爲TEST_TABLE,而不是自動生成。

0

那麼如果你不知道你做錯了什麼,或許你可以嘗試一些比較簡單,比如對數據庫中一些現有對象的經典選擇查詢,更新一些字段和submitChanges()。然後,您可以通過將您的Grid綁定到您的select所返回的結果來構建您的示例,並在網格的正確事件處理函數中調用SubmitChanges()。

+0

這是我做的第一件事情之一。使用LINQ查詢正常工作。現在我正在開始使用存儲過程。 – 2009-10-25 15:10:42

0

您應該直接通過LinqToSql改變從數據庫中的記錄。更改從存儲過程中檢索到的結果不會更新數據庫。

嘗試這樣的事情,而不是調用存儲過程:

var result = data.TEST_TABLES();