小弟,初次学习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集合,删除一批数据
a,b可以和在一起:用Expresion<Func<T,bool>> predicate 作为参数。
c的话,需要重写下扩展,自己解析下表达式树。
一般来说,自己传一个表达式,就能解决参数问题。(完成获取操作)
批量删除和更新,需单独写扩展来实现(手动构造sql)。
介个貌似不太会,以前都是sql 字符处理的...
能否写个扩展我揣测揣测下
@like%'远远'%: https://github.com/loresoft/EntityFramework.Extended你看下这个库的实现。
用过linq么?仿照吧。
不怎么会用linq,如何仿照?