sales.xaml、buy.xamlなど、いくつかの異なるwpfウィンドウがあります。
どちらのウィンドウも同じ EF コードの最初のモデルである sales.cs を使用しています。
sales.xaml の販売モデルに価値を追加しました。
モデル属性を静的にしないと、データが失われます。
ありがとうございました。
sales.xaml、buy.xamlなど、いくつかの異なるwpfウィンドウがあります。
どちらのウィンドウも同じ EF コードの最初のモデルである sales.cs を使用しています。
sales.xaml の販売モデルに価値を追加しました。
モデル属性を静的にしないと、データが失われます。
ありがとうございました。
1 つのオプションは、モデルのインスタンスを StaticResource として宣言し、各ページでそれにアクセスして、必要に応じてインスタンスを DataContext に設定することです。
<Application.Resources>
<Example:ViewModel x:Key="VM"/>
</Application.Resources>
...
<UserControl.DataContext>
<Binding Source="{StaticResource VM}"/>
</UserControl.DataContext>
各ページでこれを行う場合、すべての変更は、アプリケーションの ResourceDictionary にグローバルに格納されているインスタンスに保持されます。
どのような状況でも、データ コンテキストを静的にしないでください。シングルトンを使用しないでください。グローバルにしないでください。
データ操作を行う必要がある場合は、常に新しいデータ コンテキストをインスタンス化してください。操作が完了したら、SaveChanges を呼び出して、次に必要になったときにデータが返されるようにします。
その理由は、データ コンテキストが短命になるように設計されているためです。コンテキストを静的にすると、アプリの存続期間中に破棄されることはありません。最終的にメモリ不足になるまで、オブジェクト キャッシュを拡張し続けます。
データ コンテキストには、アボートまたはロールバック機能はありません。これらは、論理演算の最後に破棄されるように設計されています。データ コンテキストにエンティティを追加してから、SaveChanges.. エラーが発生した場合、追加したばかりのデータを削除する方法はありません。サポートされている唯一の方法は、コンテキストを破棄することです。