Некоторое время назад я задал вопрос о том, почему компаратор равенства по умолчанию не работал, когда я объединял две коллекции сущностей.
EF Code First - Linq to Entity Union EqualityComparer
Ответ был из-за того, что я использовал два разных экземпляра моего DbContext, следовательно, разные ссылки.
Так что теперь я пытаюсь разделить мой 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) {
...
}
}
Затем в двух моих репозиториях (NewsRepository и CategoryRespository) у меня есть IDbContext в качестве параметра конструктора
IDbContext _db;
public NewsRepository(IDbContext db) {
_db = db;
}
Так что теперь я предполагаю, что если я связываю IDbContextк SiteContext в области запроса, мои репозитории будут использовать один и тот же контекст?
kernel.Bind<IDbContext>().To<SiteContext>().InRequestScope();
Однако, когда я снова пытаюсь выполнить объединение из предыдущего вопроса, я все равно получаю дубликаты сущностей!Что я делаю не так?Как я могу определить, использую ли я один и тот же контекст в одном запросе?