Linq2SQL:为什么datacontext没有更新数据库

时间:2009-10-25 07:33:56

标签: linq-to-sql stored-procedures datacontext

这是我第一次参加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

3 个答案:

答案 0 :(得分:0)

如果您不知道自己做错了什么,可能您可以尝试更简单的方法,例如对数据库中某些现有对象的经典选择查询,更新一些字段和submitChanges()。然后,您可以通过将Grid绑定到select返回的结果来构建示例,并在网格的正确事件处理程序中调用SubmitChanges()。

答案 1 :(得分:0)

您应该通过LinqToSql直接更改数据库中的记录。更改从存储过程检索的结果将不会更新数据库。

尝试这样的事情,而不是调用存储过程:

var result = data.TEST_TABLES();

答案 2 :(得分:0)

我明白了。在LINQ2SQL设计器中,将StoredProcedure1的返回类型设置为TEST_TABLE而不是自动生成。