WPF アプリケーション (.NET 3.5SP1) を開発しています。シナリオは次のとおりです。
1. SQL Metal を使用してエンティティ定義 (および対応するマップ ファイル) を抽出します。これは後でデータ アクセス層に使用されます (だから、LINQ to SQL を使用しています)。
2. Unity (このアプリケーションは「PRISM ベース」) を使用して、抽象クラスとそれに対応する実装 (例: IRepository と ActualRepository、IDataContext と ActualContext、IUnitOfWork と ActualUnitOfWork など) を登録します。クラス名は実際のものではありません。 、しかしこれはここでは重要ではありません)
3.ViewModel と View の作成には MVVM スタイルが使用されます。
挿入と削除はうまくいきました..しかし、私はこの奇妙な動作に気付きました:
a)新しいレコードを作成し、いくつかのフィールドに入力することにより、ユーザーはこの(新しい)レコードを一度だけ保存できました!!! ユーザーが他のフィールドにデータを挿入するのを忘れて、このレコードを保存しようとした場合 (再度)、これらの変更は dbms に反映されませんでした!!!
そのため、ユーザーはアプリケーションを閉じ、アプリケーションを再度開き、(以前に挿入された) レコードをロードしました。現在: これらのレコードへのすべての変更は、実際には dbms に反映されていました!!!
私はそれがデータコンテキストの問題であるに違いないと思いました(これは次のように作成されました:
public SQLDataContext(string connectionString)
{
dc = new DataContext(connectionString, Mapping.GetMapping());
}
)
グーグルで調べたところ、切り離されたオブジェクトに関するいくつかの問題が見つかりました。これが私の状況と関係があるかどうかはわかりませんでしたが、いくつかのブログを読んで、関係があることがわかりました!
簡単に言うと、テーブルでタイムスタンプ フィールドを使用していると思いました。
b) 言った..完了!Et voila: 新しく作成されたレコードは、最初の保存後に複数回保存できます。アプリケーションを閉じて再度開いても問題なく動作しました。
しかし: 新たな問題が発生しました!
1 つのビューがいくつかのコンボボックスを使用しています。これらのコンボボックスにバインドされたフィールドは、操作しているこのレコードが実際のレコードである限り、適切に更新されます。次のレコードに移動すると、以前の現在のレコードのフィールド (コンボボックスにバインド) が null に割り当てられます!!!! 私はそれがバインディングの問題だと思って、明示的にコンボボックスに双方向バインディングモードを配置しましたが、結果はありませんでした。
これは私を夢中にさせます!!! (状況a)私はこれらの問題を経験しませんでした!!!!)
TextBoxes にバインドされたフィールドは期待どおりに機能します。ところで:バインディングエラーは発生しません!
だから:誰かが状況a)がこのように振る舞う理由を説明してもらえますか?なぜ b) WPF コンボボックスにバインドされたフィールドがこのように動作するのですか?
前もって感謝します