首页 新闻 会员 周边 捐助

关于EF的仓储模式,我这样子写有什么问题吗?有泛类型的例子吗(context上下文唯一怎么实现?)

0
悬赏园豆:100 [已解决问题] 解决于 2017-07-24 17:10

我这段代码有什么问题?如何保证context上下文唯一?

public class RepositoryBase<T>  : IRepository<T> where T:class,new()
    {
        private BaseContext _context;
        private BaseContext Context
        {
            get
            {
                if (_context != null)
                {
                    return _context;
                }
                else
                {
                    _context = new BaseContext();
                    return _context;
                }
            }
            set
            {
                _context = value;
            }
        }
        public void Delete(Expression<Func<T,bool>> exp)
        {        
            var datas= Context.Set<T>().Where(exp);
            Context.Set<T>().RemoveRange(datas);
            Context.SaveChanges();
        }

        public T Get(Expression<Func<T, bool>> exp)
        {
            return Context.Set<T>().Where(exp).FirstOrDefault();
        }

        public IEnumerable<T> Gets(Expression<Func<T, bool>> exp)
        {
            return Context.Set<T>().Where(exp);
        }

        public void Insert(T entity)
        {
            Context.Set<T>().Add(entity);
            Context.SaveChanges();
        }

        public void Save()
        {
            Context.SaveChanges();
        }

        public void Update(T student)
        {
           // context.Set<T>().FirstOrDefault()
        }
    }
陌陌秋雨的主页 陌陌秋雨 | 初学一级 | 园豆:2
提问于:2017-07-24 16:41
< >
分享
最佳答案
1

要想上下文唯一,就需要使用单例模式

收获园豆:100
刘宏玺 | 专家六级 |园豆:14020 | 2017-07-24 16:49

大神,,,你看清楚点我的问题啊

陌陌秋雨 | 园豆:2 (初学一级) | 2017-07-24 16:50

@陌陌秋雨: 如果你在一个地方使用多个实体的仓储,那么你就不会遇到上下文不唯一的问题,

你把上下文设计成单例模式,就不会出现上下文不唯一的问题了

刘宏玺 | 园豆:14020 (专家六级) | 2017-07-24 16:53

@刘宏玺: 那我把上下文创建里面新增一个Create方法是不是就单利了?

        private static BaseContext _context;
        private static BaseContext Context
        {
            get
            {
                if (_context != null)
                {
                    return _context;
                }
                else
                {
                    _context = new BaseContext();
                    return _context;
                }
            }
            set
            {
                _context = value;
            }
        }

        public static DbContext Create()
        {
            return Context;
        }
陌陌秋雨 | 园豆:2 (初学一级) | 2017-07-24 17:00

@陌陌秋雨: 这么写是对的!但是你现在还需要做一个工作,就是吧BaseContext的构造函数设置成private,然后就是完美的单线程的单例了

刘宏玺 | 园豆:14020 (专家六级) | 2017-07-24 17:07

@刘宏玺: 谢谢大神。明白了

陌陌秋雨 | 园豆:2 (初学一级) | 2017-07-24 17:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册