首页 新闻 会员 周边 捐助

EF CodeFirst 我这个写法可以保持DbContext数据操作上下文的唯一吗?

0
悬赏园豆:20 [已解决问题] 解决于 2016-06-20 09:29
我也是才开始接触的,我描述的也不是很清楚,不知道大神们能不能理解的意思!!

public class DBContextFactory { public static DbContext GetCurrentContext() { //CallContext:保证线程内创建的数据操作上下文是唯一的。 DbContext DbContext = (DbContext)CallContext.GetData("context"); if (DbContext == null) { DbContext = new EFBaseDbContext(); CallContext.SetData("context", DbContext); } return DbContext; } }

//EFBaseDbContext

    public class EFBaseDbContext : DbContext
    {
        public EFBaseDbContext()
            : base("SQLConn.Traffic")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //base.OnModelCreating(modelBuilder);
            Database.SetInitializer<EFBaseDbContext>(null);
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

        public DbSet<User_Info> Users { get; set; }
    }
//DAL 获取当前上下文
        public DbContext context = DBContextFactory.GetCurrentContext();
I-Can的主页 I-Can | 初学一级 | 园豆:121
提问于:2015-03-20 15:26
< >
分享
最佳答案
0

(1)你在方法范围使用:using(var db = new EFBaseDbContext()){}就可以。

(2)你在类范围使用:实现IDispose接口就行。

(3)你在多个类中使用:对于每个HttpRequest,所有类共享一个EFBaseDbContext实例。考虑使用IOC工具。

收获园豆:10
秋天不会来 | 菜鸟二级 |园豆:320 | 2015-03-20 22:05
其他回答(3)
0

不知道能否保证唯一,没做过。

但是,如果是WEB,你不应该这样去CACHE,即便你是DESKTOP,也不应该使用这个方案,可以考虑用 AutoFac 之类的IoC技术。

收获园豆:3
519740105 | 园豆:5810 (大侠五级) | 2015-03-20 15:29

谢谢,已经在了解相关文章了。

支持(0) 反对(0) I-Can | 园豆:121 (初学一级) | 2015-03-20 17:44
0

http://www.cnblogs.com/hanyinglong/archive/2013/04/12/3017309.html 楼主可以看这个博客

收获园豆:2
天羽星河落 | 园豆:188 (初学一级) | 2015-03-20 17:04

谢谢,已经收藏,回家再研究。不过里面的代码看着都好熟悉,

支持(0) 反对(0) I-Can | 园豆:121 (初学一级) | 2015-03-20 17:45
0

上面有些是胡扯的 你这个代码 只要加上lock应该一点问题都没有

callcontext 本来就是线程级别的容器

收获园豆:5
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2015-03-23 21:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册