次のシナリオがあります。
ここからリポジトリパターンと作業単位でEFを使用しています
次に、部分クラスを拡張し、GetAll およびその他のメソッドを持つ Finder クラスを作成しました。これは以下で見ることができます:
以下では、すべてのクラスのリポジトリで作業単位クラスを使用して、汎用リポジトリからインスタンスを取得していることがわかります。
protected Repository<Category> _CategoryRepository;
public Repository<Category> CategoryRepository
{
get { return _CategoryRepository ?? (_CategoryRepository = new Repository<Category>(context)); }
}
このように、私はさまざまなリポジトリを持っていました.dbからエンティティを取得して別のコンテキストから更新すると、問題が発生しました。そこで、このメソッドを使用してコンテキストの有効期間管理を行いました。そして、それはその問題を解決しました。
今私が直面している問題は、次のコードにあります。
var cat = Instance.Category.GetSingle(c => c.CategoryID == 7);
var orignal = cat.CategoryName;
var expected = cat.CategoryName + " Test Catg Update";
cat.CategoryName = expected;
cat.Update(); //This doesn't actually update due to a validation in place (which is correct)
cat = Instance.Category.GetSingle(c => c.CategoryID == 7);
Assert.AreEqual(cat.CategoryName, expected);
Update を使用していて、その中にいくつかのバリデーターがあり、Update が失敗した場合 (たとえば、文字列のサイズが 15 文字を超えているため)。GetSingle (上記のコードの最後の 2 行目) を再度呼び出そうとすると、同じ古いレコード [cat.CategoryName + "Test Catg Update"] が表示されます。これは通常の方法ですか?そうでない場合は、データベースからオブジェクトをリロードできるようにこれを修正できますか。
他のコードや参照が必要な場合はお知らせください。