0

Code First POCOでEF 5を使用しています。

リポジトリの SaveChanges 実装は次のとおりです。

    public virtual List<DbEntityValidationResult> SaveChanges()
    {
        var errors = new List<DbEntityValidationResult>();
        try
        {
            DbContext.SaveChanges();
        }
        catch (DbEntityValidationException ex)
        {
            errors.AddRange(ex.EntityValidationErrors);
        }

        return errors;
    }

単一の検証エラーにより、エンティティはデータベースに書き込まれません。有効なエンティティが書き出され、無効なエンティティのエラーが返されることを期待していました。

これは EF がどのように行動することになっているのですか?

4

2 に答える 2

2

それがEFの仕組みです。

SaveChanges()トランザクションを作成し、すべての変更をコンテキストに保存しようとします。

何らかの理由で書き込みが失敗した場合、トランザクション全体がロールバックされ、変更は保持されません。

于 2013-03-05T07:03:47.243 に答える
0

さらに掘り下げました。EEF はエンティティの書き込みを試みません。最初にオブジェクト コンテキストから検証を呼び出します。いずれかのエンティティが失敗した場合、それらは DbValidationResult に追加され、保存はキャンセルされます。

一括トランザクションの場合、それらのエンティティを削除し、エラーを処理してから再保存できます。

すべてのエンティティが検証されると、EF は必要に応じて変更をデータベースに書き込みます。

于 2013-11-13T22:51:38.740 に答える