我已經在Web應用程序中爲實體框架實現了一個簡單的存儲庫模式。實體框架 - Web應用程序中的範圍上下文
我有好幾個版本庫,所有的子類,在
底座看上去像這樣
public class BaseRepository<TEntity> : IRepository<TEntity>
{
protected readonly RedirectsEntities Context;
public BaseRepository()
{
Context = new RedirectsEntities();
}
一些常用的方法(RedirectsEntities是EF的datacontext,或任何它被稱爲)基礎
而且我有一個RuleRepository和一個SiteRepository,它將其子類化爲
但是,這在查找網站並使用該值保存到規則
錯誤是
「ADO.Net實體框架的實體對象不能由IEntityChangeTracker的多個實例引用」
大概是因爲每個倉庫都有不同重定向實例的實例?
這表明在DataContext移動到一個獨立的類,在一個靜態變量
例如保持它
public class DataContext
{
private static RedirectsEntities _dbEntities;
public static RedirectsEntities DbEntities
{
get
{
if (_dbEntities == null)
{
_dbEntities = new RedirectsEntities();
}
return _dbEntities;
}
set { _dbEntities = value; }
}
}
,然後我的基地倉庫的構造是這樣的:
public BaseRepository()
{
Context = DataContext.DbEntities;
}
因此,這似乎已經解決了我的問題,但我擔心的是RedirectsEntities的範圍現在是不正確。
任何人都可以對此發表評論嗎?
感謝您的回答。我沒有使用IoC容器。只是做窮人的依賴注射(哦,恥辱!) 所以在這種情況下,我會有DataContext作爲存儲庫上的屬性?在創建存儲庫實例之前新建一個DataContext?然後在存儲庫上設置datacontext屬性? – ChrisCa 2010-02-04 15:14:32
查看我更新的答案。 – 2010-02-04 15:30:32
謝謝......這對於每個請求的範圍確定都是非常好的技巧(儘管使用Lightspeed而不是EF) http://www.mindscape.co.nz/blog/index.php/2008/05/12/using-所述單元-的功每個請求圖案在-ASPNET-MVC / – ChrisCa 2010-02-04 15:58:16