如何保证对象线程内唯一:数据槽(CallContext)
2017-06-09 10:30
239 查看
CallContext 是类似于方法调用的线程本地存储区的专用集合对象,并提供对每个逻辑执行线程都唯一的数据槽。数据槽不在其他逻辑线程上的调用上下文之间共享。当 CallContext 沿执行代码路径往返传播并且由该路径中的各个对象检查时,可将对象添加到其中。
不能每次使用EF上下文都通过new来创建对象,因为在不同层中使用EF上下文时就不在是同一个上下文对象了。我们可能会考虑使用单例模式,但是不能通过单例模式来解决EF上下文对象的问题,因为如果使用单例模式,那么大家都共用一个EF上下文对象一直不能释放,一旦释放,其他正在使用的用户用不了了。可以考虑一次请求中使用一个EF上下文对象。这样既不影响其他用户的操作,也减少了数据库连接,即线程内唯一对象,因为一个请求就是一个线程。
public class DbContextFactory { public static DbContext CreateDbContext() { DbContext dbContext = (DbContext)CallContext.GetData("dbContext"); if(dbContext == null) { dbContext = new RolePermissionEntities(); CallContext.SetData("dbContext",dbContext); } return dbContext; } }
不能每次使用EF上下文都通过new来创建对象,因为在不同层中使用EF上下文时就不在是同一个上下文对象了。我们可能会考虑使用单例模式,但是不能通过单例模式来解决EF上下文对象的问题,因为如果使用单例模式,那么大家都共用一个EF上下文对象一直不能释放,一旦释放,其他正在使用的用户用不了了。可以考虑一次请求中使用一个EF上下文对象。这样既不影响其他用户的操作,也减少了数据库连接,即线程内唯一对象,因为一个请求就是一个线程。
相关文章推荐
- C# 如何保证对象线程内唯一:数据槽(CallContext)
- C# 如何保证对象线程内唯一:数据槽(CallContext)
- 线程内唯一对象HttpContext
- ASP.net如何保证EF操作类线程内唯一
- ASP EF框架,数据库操作类(上下文类)的实例创建,线程内唯一对象(HttpContext)
- C# 线程内唯一对象(HttpContext)
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- SQL Server如何保证可空字段中非空值唯一
- 在类库文件里如何获取context对象
- SQL Server如何保证可空字段中非空值唯一
- 当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- C# API 如何保证使用托管对象的平台调用成功
- SQL Server如何保证可空字段中非空值唯一
- 如何保证只能在堆(heap)上创建对象?
- chap 17:当JNI遇到多线程--java对象如何被C++中的多个线程访问?
- SQL Server如何保证可空字段中非空值唯一
- SQL Server如何保证可空字段中非空值唯一
- XAF 如何用其他线程更新对象
- 多线程中如何保证某段程序 连续执行,不被其他线程干扰
- SQL Server如何保证可空字段中非空值唯一