3

WPFでLINQ-TO-SQLを使用して非常に簡単な例を設定しました。

このようにオブジェクト(pageItem)を取得し、プロパティを変更できます。SubmitChanges()を呼び出すと、エラーは発生しませんが、変更は保存されません。

MainDataContext db = new MainDataContext();
var pageItem = (from p in db.PageItems
              where p.Id == 1
              select p).SingleOrDefault();

pageItem.Title = "changed";
db.SubmitChanges();

SubmitChangesが変更を送信しない原因は何ですか?

より詳しい情報:

これも機能しません。db.ExecuteCommandも機能しません。奇妙なことに、F11のデバッグがSubmitChanges()またはExecuteCommand()にステップインしない場合、これらにステップインできないのはなぜですか。

using (var db = new MainDataContext())
{
    var pageItem = (from p in db.PageItems
                    where p.Id == 1
                    select p).SingleOrDefault();

    pageItem.Title = "changed";
    db.SubmitChanges();

    db.ExecuteCommand("INSERT INTO PageItems (Title) VALUES ('this is the title')");


    if (pageItem != null)
        MainContent.Children.Add(new QuickForm(pageItem));

}

より詳しい情報:

db.Log = Console.Outは私にこれを与えます:

SELECT [t0].[Id], [t0].[IdCode], [t0].[Title], [t0].[Description], [t0].[DisplayOrder]
FROM [dbo].[PageItems] AS [t0]
WHERE [t0].[Id] = @p0
'TestPageManager23434.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\PresentationFramework.resources\3.0.0.0_de_31bf3856ad364e35\PresentationFramework.resources.dll'
-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

INSERT INTO PageItems (Title) VALUES ('this is the title')
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 3.5.30729.1

The thread 0x1190 has exited with code 0 (0x0).

答え

解決策は3つありました。

  • Visual Studioで見ていたものとは別のデータベースを変更していました、ソリューション:

    var db = new MainDataContext(@ "C:\ Users \ TestUser \ Documents \ Visual Studio 2008 \ Projects \ TestPageManager23434 \ TestPageManager23434 \ Data \ Main.mdf"))

  • Updateは機能しましたが、SubmitChanges()は機能しませんでした。解決策は、主キーを設定することでした。

  • それでもすべての問題が表示されていませんでした。問題は、更新されていない「データの表示」ウィンドウがいくつか開いていたことです。

4

4 に答える 4

6

これは、SQLServerのテーブルに主キーが定義されていない場合に発生する可能性があります

于 2009-10-16T16:35:06.927 に答える
2

SQL式mdfファイルを使用していますか?

これにより、元のファイルではなくファイルのコピーが取得され、説明している症状が発生する可能性があるという記事があります。

FTA:

プロジェクトシステムまたはサーバーエクスプローラーウィザードは、mdfをプロジェクトディレクトリに「コピー」することを提案していると思います。データベースのコピーを操作していて、サーバーエクスプローラーで他のデータベースを表示している可能性があります。

于 2009-10-16T16:25:18.300 に答える
2

何らかの理由で、コンテキストが変更を追跡していない可能性があります。ライターに接続してみてdb.Log、呼び出し時にLINQ->SQLが何をしているかを調べてくださいSubmitChanges()

db.Log = Console.Out;

次に、デバッグで実行されている出力ウィンドウを監視し、何が起こっているかを確認できます。

于 2009-10-16T16:26:57.843 に答える
0

プロジェクトに表示されるデータベースのレコードがSubmitChangesメソッドによって変更されないという同じ問題が発生しました。

何度も試行錯誤を重ねた結果、システムが別のバージョンのデータベース Northwnd.mdfをプロジェクトのルートディレクトリに配置していることがわかりました\Bin\Debug\Northwnd.mdf。ここで、変更が完全に発生しました。

于 2013-10-27T00:55:46.417 に答える