0

作業ユニットとリポジトリ・パターンを使用しています。最近、この作業ユニットへの変更は後続の問合せに反映されません。例:EF4.1ベースのリポジトリとデータの一貫性のあるビュー

var ctx = DIContainer.Current.Resolve<IB2bContext>(); 
var rep = DIContainer.Current.Resolve<IRepository<Word>>(
       new DependencyOverride<IB2bContext>(ctx)); 

rep.Add(new Word() { "One" }; 
rep.Add(new Word() { "Two" }; 

rep.GetAll().ToList().ForEach(i => 
       Console.Write(i.text)); // nothing seen here 

つまり、SaveChanges()を呼び出してオブジェクトをデータベースに保存しない限り、それらは表示されません。うーん、私はChangeTrackerを使いこなすことができ、context.Entry(foo).Property(...)。CurrentValueのようなことをすることができます。しかし、それは層のデカップリングのようなdddで遊ばれますか?私はそうは思わない。かつてはデータベーストランザクションと呼ばれていた一貫したデータビューはどこにありますか?

私に教えてください。 Armin

答えて

2

あなたのレポジトリにはGetAllメソッドが公開されています。メソッド自体はデータベースクエリを実行します。データベースに挿入されていないローカルデータを表示する場合は、結果セットに追加する必要があります。たとえば、次のようになります。

public IEnumerable<Word> GetAll() 
{ 
    DbSet<Word> set = context.Set<Word>(); 
    return set.AsEnumerable().Concat(set.Local); 
} 

クエリの実行は、永続化された(実際の)データを返すことのみに責任があります。

+0

ありがとうございます。私は明らかにローカルDbSetを認識していませんでした。 –

関連する問題