1
我用下面,static class
访问数据方面在我的应用关于如何访问我的DataContext(不论它是错的)
public static class DataContext
{
internal const string _contextDataKey = "dataContext";
/// <summary>
/// Returns a unique data context that lives for the duration of the request, which can be from ASP.NET or a WCF service
/// </summary>
/// <returns>The entity data model context for the current request</returns>
public static EntityDataModelContext GetDataContext()
{
IPersistanceContainer state;
if (HttpContext.Current != null)
{
state = new AspNetPersistanceContainer();
}
else if (OperationContext.Current != null)
{
state = new WcfPersistanceContainer();
}
else
{
state = new StaticPersistanceContainer(); // this container is thread-unsafe.
}
EntityDataModelContext edm = state.Get<EntityDataModelContext>(_contextDataKey);
if (edm == null)
{
edm = new EntityDataModelContext();
state.Store(_contextDataKey, edm);
}
return edm;
}
}
忘掉其他容器,这是WCF
和Console
应用简单-tests分别,这里的ASP.NET
容器:
internal class AspNetPersistanceContainer : IPersistanceContainer
{
public T Get<T>(string key) where T : class
{
if (HttpContext.Current.Items.Contains(key))
return (T)HttpContext.Current.Items[key];
return null;
}
public void Store(string key, object value)
{
HttpContext.Current.Items[key] = value;
}
}
当我需要访问context
我只是援引DataContext.GetDataContext()
,做我的DB-访问,我甲肾上腺素ver添加任何using
声明。
如果我添加一条using
语句,context
适合一次性使用,下次尝试使用它时,它将被处置。引发异常。
如果我不这样做,就像现在一样,这让我有点不高兴,我觉得这样做不是正确的做法,不处理它。
所以我想知道在这里做什么是正确的事情。
这个设计是否有缺陷,我应该放弃它吗?
我应该想出一种方法来重新创建上下文吗?
我应该只是离开设计,这很好吗?
也许设计是“足够好”,有没有任何书你会推荐我阅读这个主题?我觉得我在后端架构方面的技能很缺乏。