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