我回想了一個問題,回想一下當我是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