しばらく前に、エンティティの2つのコレクションを結合したときに、デフォルトの等式比較機能が機能しないように見える理由について質問しました。
EFコードファースト-LinqtoEntities Union EqualityComparer
答えは、DbContextの2つの異なるインスタンスを使用していたため、参照が異なるという事実によるものでした。
そのため、リクエスト全体でDbContentを共有しようとしています。「複雑な」例がいくつかありますが、もっと簡単な解決策を試してみようと思いました。
そこで、エンティティの概要を示すIDbContextインターフェイスを作成しました
public interface IDbContext {
int SaveChanges();
DbSet<News> News { get; set; }
DbSet<Category> Categories { get; set; }
}
次に、私のDbContextは次のように実装されます。
public class SiteContext : DbContext, IDbContext {
public DbSet<News> News { get; set; }
public DbSet<Category> Categories { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
...
}
}
次に、2つのリポジトリ(NewsRepositoryとCategoryRespository)に、コンストラクターパラメーターとしてIDbContextがあります。
IDbContext _db;
public NewsRepository(IDbContext db) {
_db = db;
}
では、リクエストスコープでIDbContextをSiteContextにバインドすると、リポジトリが同じコンテキストを共有すると仮定しますか?
kernel.Bind<IDbContext>().To<SiteContext>().InRequestScope();
ただし、前の質問からユニオンを再試行すると、まだ重複するエンティティが表示されます。私が間違っていることは何ですか?1つのリクエストで同じコンテキストを確実に使用しているかどうかを確認するにはどうすればよいですか?