mke*_*y33 3 c# datacontext idisposable repository-pattern linq-to-sql
我问的原因是因为HttpContext.Current.Items集合似乎是一个放置IDisposable对象的好地方,DataContext因此存储库可以透明地访问它,而不必将与特定ORM技术相关的任何依赖项注入存储库.这也将允许存储库决定是否参与UnitOfWork或承担实际持久存在任何更改的额外责任.
例如:
这页纸:
protected void Page_Load(...)
{
Items[KeyValueFromConfigurationFile] = new DataContext();
var repo = new Repository();
var rootEntity = repo.GetById(1);
}
Run Code Online (Sandbox Code Playgroud)
存储库:
public virtual TEntity GetById(int id)
{
var ctx = HttpContext.Current.Items[KeyValueFromConfigurationFile] as DataContext;
return ctx.TEntities.SingleOrDefault(p => p.Id == id);
}
Run Code Online (Sandbox Code Playgroud)
当然,我会检查空值并执行获取a所需的步骤,DataContext如果它在HttpContext.Current.Items集合中不可用.
所以,回到我原来的问题给出了上面的代码:请问HttpContext.Current与任何包含在其项集合对象的布置沿着即使抛出一个异常?
Pau*_*les 13
HttpContext.Current.Items中的对象不会自动处理.您需要自己处理.您可以在global.asax Application_EndRequest中执行此操作:
foreach (var item in HttpContext.Current.Items.Values)
{
var disposableItem = item as IDisposable;
if (disposableItem != null)
{
disposableItem.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |