4

私は Visual Studio 2012 を使用しています。ローカル データベース (巧妙に Database1 という名前) に非常に単純な Products テーブルがあります。id と Name の 2 つのフィールドがあります。いくつかのテストデータをプリロードしました。

次のコードは、最初の製品の名前を更新する必要があります。内部的にはそうです。すべての製品を取得して、最初の製品の名前が「シャツ」であることを確認できます。ただし、変更がデータベースにフラッシュされることはありません。レコードは更新されません。データベースを調べると、名前が変更されていないことがわかります。

私の質問は簡単です: なぜ変更がデータベースに送信されないのですか?

using (var context = new Database1Entities())
{
    var products = context.Products;

    products.First().Name = "Shirt";
    context.SaveChanges();
}

前もって感謝します。

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- =-=-=-=-=-=-=-=-=-=-=-=

編集:

完全なコードを入力してここに出力するように最善を尽くしました。しかし、何をしても、「あなたの投稿には、適切にフォーマットされていないコードが含まれているようです」というエラー メッセージが引き続き表示されます。30分後、私はあきらめています。

編集:

コードと出力はこちら: http://pastebin.com/GmQtwAND

4

2 に答える 2

3

私は問題を発見しました...そしてその解決策。

データベース ファイルの [出力ディレクトリにコピー] プロパティが [常にコピー] に設定されていました。もちろん、これは、アプリケーションがビルドされるたびに、新しいコピーが Bin ディレクトリに配置されることを意味していました。修正は、「新しい場合はコピー」に設定することでした。ドー。

つまり、変更はデータベースに保持されていましたが、アプリケーションが再構築されたときにデータベースが破壊されていました。

于 2013-06-06T15:19:24.803 に答える
2

これは、変更を追跡していないことを意味している可能性があります。State を -> Modified に設定して、動作するかどうかを確認してみてください。

var product = products.First();
product.Name = "Shirt";
product.State = EntityState.Modified;
context.SaveChanges();

コンテキストに対して有効にしたい場合は、次のようにできます。

context.Configuration.AutoDetectChangesEnabled = true;
于 2013-06-05T03:41:54.877 に答える