首页 新闻 会员 周边 捐助

MVC EntityFramework简单方法封装,求高手指正下

0
悬赏园豆:80 [已关闭问题] 关闭于 2013-07-04 14:32

小弟,初次学习MVC和EntityFramework一下是本人封装的方法:

1)添加

    public void Add<T>(T model) where T : class
        {
            using (DBSetting db = new DBSetting())
            {
                db.Set<T>().Add(model);
                db.SaveChanges();
            }
        }

 

2)修改

        public void Modify<T>(T model) where T : class
        {
            using (DBSetting db = new DBSetting())
            {
                if (db.Entry<T>(model).State == EntityState.Detached)
                {
                    db.Set<T>().Attach(model);
                    db.Entry<T>(model).State = EntityState.Modified;
                }
                db.SaveChanges();
            }
        }

3)删除

       public void Delete<T>(params string[] ids) where T : class
        {
            using (DBSetting db = new DBSetting())
            {
                T v = db.Set<T>().Find(ids);
                if (v == null)
                {
                    return;
                }
                db.Set<T>().Remove(v);
                db.SaveChanges();
            }
        }

4)获取对象

        public T GetModel<T>(params string[] id) where T : class
        {
            using (DBSetting db = new DBSetting())
            {
                return db.Set<T>().Find(id);
            }
        }

 

----------

个人感觉3、4 这两个方法封装的有问题

方法3:要求是删除某一对象或者允许批量删除,网上说批量操作会慢,所以写了没有封装的方法,应用了EntityFramework.Extensions;(批量删除)

public void DeleteDepartments(IEnumerable<string> departmentIDs)
        {
            List<string> ids = departmentIDs as List<string> ?? departmentIDs.ToList();
            using (DBSetting db = new DBSetting())
            {
                db.Main_Department.Delete(m => ids.Contains(m.DepartmentID));
            }
        }

 

方法4:根据指定主键ID 获取某一模型,根据某一条件查询出所有符合条件的数据,返回值应该是IEnumerable<T>

 

求大侠指点下,该如何封装这些方法。

a)指定主键ID,获取某一模型

b)根据条件查询一个集合

c)指定主键ID,删除某一数据

d)主键ID集合,删除一批数据

like%'远远'%的主页 like%'远远'% | 小虾三级 | 园豆:635
提问于:2013-06-25 14:05
< >
分享
所有回答(3)
0

a,b可以和在一起:用Expresion<Func<T,bool>> predicate 作为参数。

c的话,需要重写下扩展,自己解析下表达式树。

一般来说,自己传一个表达式,就能解决参数问题。(完成获取操作)

批量删除和更新,需单独写扩展来实现(手动构造sql)。

幻天芒 | 园豆:37205 (高人七级) | 2013-06-25 14:17

介个貌似不太会,以前都是sql 字符处理的...

能否写个扩展我揣测揣测下

支持(0) 反对(0) like%'远远'% | 园豆:635 (小虾三级) | 2013-06-26 10:09

@like%'远远'%: https://github.com/loresoft/EntityFramework.Extended你看下这个库的实现。

支持(0) 反对(0) 幻天芒 | 园豆:37205 (高人七级) | 2013-06-26 12:52
0

用过linq么?仿照吧。

Eric.luo | 园豆:853 (小虾三级) | 2013-06-27 14:35

不怎么会用linq,如何仿照?

支持(0) 反对(0) like%'远远'% | 园豆:635 (小虾三级) | 2013-06-28 08:43
0
public IEnumerable<T> GetLstInfo<T>(Expression<Func<T, bool>> express) where T : class
        {
            using (DBSetting db = new DBSetting())
            {
                return db.Set<T>().Where(express).ToList();
            }
        }
 
 
like%'远远'% | 园豆:635 (小虾三级) | 2013-07-01 13:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册