Linq2SQL:データベースをデータコンテキスト更新しないのはなぜですか
-
06-07-2019 - |
質問
これは、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();
所属していません StackOverflow