2009-02-25 10 views
8

私のWPFアプリケーションで.MDFデータベースを作成しました。SubmitChanges()がLINQ-to-SQLで動作しないのはなぜですか?

その後、LINQ-to-SQLクラスを生成し、LINQを使用してすべての顧客を取得しました。

私はそれらを実行し、それぞれの姓を変更します。

ただし、私がSubmitChangesを呼び出すと、データベースは変更されずに残ります

私はそれがSubmitChanges()の目的であり、データベースへの変更を送信すると考えましたか?

私は何が欠けていますか、どのようにして「変更を提出してください」をデータベースに戻すのですか?

public Window1() 
{ 
    InitializeComponent(); 

    Main2DataContext _db = new Main2DataContext(); 
    var customers = from c in _db.Customers 
        select c; 

    foreach (var customer in customers) 
    { 
     customer.LastName = "CHANGED lastname"; //ListBox shows changes 
    } 

    _db.SubmitChanges(); //does NOT save to database (???) 

} 
+2

これは本当に間違った質問ですが、お客様のテーブルにはプライマリキーがありますか? –

+0

はい:IDはプライマリキーで、NULLを許可せず、アイデンティティ仕様はIsIdentity = Yesに設定されています。 Visual Studioで.MDFファイルを作成しました。 –

答えて

15

私は問題が何であるか知っていると思います。ローカル.mdfファイルを使用していますか?その場合は、bin/debugフォルダを確認してください。あなたはそこに変更を加えたデータベースを持っていると思います。私は、ビルドするたびにbin/debugフォルダにコピーされているプロジェクトに.mdfファイルがあると思います。したがって、変更はコピーに保存され、プロジェクトに直接存在するコピーに反映されません。

+0

私はちょうどこれを実行し、それは正しいようです。 MDFのビン/デバッグコピーにアタッチすると、変更が表示されます。 –

+0

ビンゴ、それだった!誰もが頑張ってくれてありがとう –

+0

私が知っているのは、これまで同じことを何時間も追いかけてきたからです。ガード私は助けることができます。 – Micah

2

検索と変更の間のどの時点でも、_dbが新しいコンテキストにリセットされていないことを確認してください。 TheListBox.ItemsSource = _db.Customers;を実行することで、データソースの割り当てを簡素化することもできます。現在のコードには、あなたが何を記述しているのかを正確に伝えています。あなたのコンテキストでログを設定することをお勧めします(_db.Logをいくつかの作者に設定します)。を呼び出したときに実際に発生した変更を確認できるように、デバッグ中に出力ウィンドウの変更を見ることができるようにConsole.Outを使用します。

+0

私は_db.Log = Console.Outに入れます。サブチェンジ行の前には、出力ウィンドウに表示されません。出力する場所はどこですか? –

+0

私は最大限にコードを単純化しました。オブジェクトを取得して変更し、SubmitChangesで保存しますが、データベースは変更されません。なぜこれが当てはまるのでしょうか? –

+0

デバッグモードで実行していますか?また、[ツール] - > [オプション] - > [デバッグ] - > [一般]で、[すべての出力ウィンドウのテキストをイミディエイトウィンドウにリダイレクトする]オプションが選択されていますか?もしそうなら、あなたの出力は直接ウィンドウに向かいます。そうでなければ、StringBuilderの周りに独自のTextWriterを設定し、Logを設定してみてください。 –