我之前问了一个关于为什么默认的等值比较器在我合并两个实体集合时似乎不起作用的问题。
EF Code First - Linq to Entities 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 和 CategoryRepository)中,我将 IDbContext 作为构造函数参数。
IDbContext _db;
public NewsRepository(IDbContext db) {
_db = db;
}
所以现在我假设如果我将IDbContext绑定到请求范围中的SiteContext,我的存储库将共享相同的上下文?
kernel.Bind<IDbContext>().To<SiteContext>().InRequestScope();
然而,当我尝试使用之前问题中的联合查询时,仍然会收到重复的实体!我做错了什么?我如何确定在一个请求中确实使用了相同的上下文?