我回想了一个问题,回想一下当我是union两个实体集合时,为什么默认的相等比较器似乎不工作。EF DbContext和Ninject
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();
但是,当我从上一个问题再次尝试我的联合时,我仍然收到重复的实体!我做错了什么?我怎么知道我是否在一个请求中使用了相同的上下文?
您可以在上下文的构造函数中设置断点?我正在使用相同的方法,并且每次请求都使用上下文,就像您一样 – Gluip 2011-07-24 10:30:03