エンティティ フレームワークを使用して、N 層の Wpf アプリケーションでデータを永続化しています。私の dbcontext はすべてのリポジトリ間で共有され、破棄されることはありません。データを永続化するとき、オブジェクトを変更済みとしてマークし、変更を保存しようとします。オブジェクトの永続化中にエラーが発生した場合、オブジェクトは変更済みとしてマークされたままになり、ユーザーが現在の操作を中止すると、別のオブジェクトを保存するときに同じエラーが発生します。
dbcontext で SaveChanges をオーバーライドすることでこれを解決しました。エラーが発生した場合は、すべての変更を受け入れます (以下のコードを参照)。そのため、オブジェクトにエラーが発生し、すべてのオブジェクトが永続化されていなくても、変更されていないとマークされます。
これは正しくありません...この解決策に同意する人はいますか? 別の解決策は、リポジトリの各メソッドで dbcontext を新しくし、すぐに破棄することです。これにより、リポジトリがより複雑で「うるさい」ものになり、データを遅延ロードする機能も失われます... 誰か別の解決策がありますか?
    //In my repositories
    public void UpdateObject(Object object)
    {
        dbContext.Entry(object).State = EntityState.Modified;
        dbContext.SaveChanges();
    }
    //In my dbcontext class
    private ObjectContext ObjectContext()
    {
        return (this as IObjectContextAdapter).ObjectContext;
    }
    public override int SaveChanges()
    {
        try
        {
            return base.SaveChanges();
        }
        catch (Exception)
        {
            ObjectContext().AcceptAllChanges();
            throw;
        }
    }