Linq2SQL:データベースをデータコンテキスト更新しないのはなぜですか

StackOverflow https://stackoverflow.com/questions/1620263

質問

これは、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

わかりました。 LINQ2SQLデザイナーで、StoredProcedure1の戻り値の型を自動生成ではなくTEST_TABLEに設定します。

他のヒント

何が間違っているのかわからない場合は、おそらく、データベース内の既存のオブジェクトに対する古典的な選択クエリ、フィールドの更新、submitChanges()など、もっと簡単な方法を試すことができます。次に、選択によって返された結果にグリッドをバインドすることにより、サンプルを構築し、グリッドの正しいイベントハンドラーでSubmitChanges()を呼び出します。

LinqToSqlを介してデータベースのレコードを直接変更する必要があります。ストアドプロシージャから取得した結果を変更しても、データベースは更新されません。

ストアドプロシージャを呼び出す代わりに、次のようなことを試してください:

var result = data.TEST_TABLES();
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top