EF学习笔记——通用增删改查方案
来源:互联网 发布:软件欢迎界面 素材 编辑:程序博客网 时间:2024/04/27 13:55
我刚接触EF未久,还不知道它有什么强大之处,但看上去,EF提供了一般的增删改查功能。以往用过一些ORM方法,尽管有代码生成器,但代码量总的来说比较多。这次采用EF,我就想,能不能尽量写出一些通用的方法,以后添加表、实体类,只需做很少的改动,就能拥有基本的增删改查功能呢?
方案如下:
1、分为几个部分:BLL、DAL、Model、Interface。其中,EF生成的代码放在Model。因为不想由BLL直接操作Model,因此还是增加一个DAL,由它来对EF的方法作进一步的封装,供BLL调用。至于接口,则是出于如下考虑:增删改查,BLL和DAL都需要实现,因此它们最好实现同一接口;最重要的,因为使用了接口,在BLL中,方便调用DAL对象。
这几个部分分别介绍如下:
1、接口Interface
public interface IEntity { long _ID { get;} }
public interface ICommon<T> where T : class,IEntity { T Add(T model); T Update(T model); void Delete(T model); //按主键删除,keyValues是主键值 void Delete(params object[] keyValues); //keyValues是主键值 T Find(params object[] keyValues); List<T> FindAll(); }
2、DAL
通用的增删改查代码:
public abstract class BaseCommon<T> : Interface.ICommon<T> where T : class,Interface.IEntity { DbContext db; public BaseCommon(DbContext context) { this.db = context; } public DbContext Context { get { return db; } } #region ICommon<T> public T Add(T model) { db.Set<T>().Add(model); db.SaveChanges(); return model; } public T Update(T model) { if (db.Entry<T>(model).State == EntityState.Modified) { db.SaveChanges(); } else if (db.Entry<T>(model).State == EntityState.Detached) { try { db.Set<T>().Attach(model); db.Entry<T>(model).State = EntityState.Modified; } catch (InvalidOperationException) { T old = Find(model._ID); db.Entry(old).CurrentValues.SetValues(model); } db.SaveChanges(); } return model; } public void Delete(T model) { db.Set<T>().Remove(model); db.SaveChanges(); } public void Delete(params object[] keyValues) { T model = Find(keyValues); if (model != null) { db.Set<T>().Remove(model); db.SaveChanges(); } } public T Find(params object[] keyValues) { return db.Set<T>().Find(keyValues); } public List<T> FindAll() { return db.Set<T>().ToList(); } #endregion }
这里面,已经封装好了一般的增删改查方法。而对应数据库每个表对象的那些类,只需继承这个BaseCommon类,即可拥有增删改查功能。如:
public partial class TableA : BaseCommon<Model.TableA> { }
这样,TableA对象会自然拥有增删改查功能。假如需要扩充它的功能,我们可以再写一个TableA的分部类。
以后,新增一个表TableB,在DAL这里,一般情况下只需新增一句:
public partial class TableB : BaseCommon<Model.TableB> { }
是不是很方便?
3、BLL
BLL是供UI层,或者上一层调用的,因此,它每个对象,也应该有增删改查的基本功能。当然,BLL无须直接实现,是通过调用DAL来实现:
public abstract class Common<TDAL, TModel> : Interface.ICommon<TModel> where TDAL : class ,new() where TModel : class ,Interface.IEntity { protected TDAL dal; private Interface.ICommon<TModel> common; public Common() { dal = new TDAL(); common = (Interface.ICommon<TModel>)dal; } #region ICommon<TModel> public TModel Add(TModel model) { return common.Add(model); } public TModel Update(TModel model) { return common.Update(model); } public void Delete(TModel model) { common.Delete(model); } public void Delete(params object[] keyValues) { common.Delete(keyValues); } public TModel Find(params object[] keyValues) { return common.Find(keyValues); } public List<TModel> FindAll() { return common.FindAll(); } #endregion }
与DAL类似,TableA对象在这里是这样的:
public partial class TableA : Common<DAL.TableA, Model.TableA> { }
同理,如果以后新增了表TalbeB,在这里也只是新增一句而已。
这里还有一个好处,就是对外界调用而言,根本不需要知道泛型,就是一个 TableA table = new TalbeA();就可以了。
0 0
- EF学习笔记——通用增删改查方案
- EF学习笔记——通用增删改查方案
- EF学习笔记——通用增删改查方案
- JDBC学习笔记—增删改查
- 《MVC + EF实现增删改查》——改
- 《MVC+EF实现增删改查》——查
- EF增删改查
- EF增删查改
- EF增删改查
- ef增删改查
- ORM之EF学习---增删改查
- java学习笔记——使用JDBC,对数据库进行增删改查(方案一)【推荐】
- java学习笔记——使用JDBC,对数据库进行增删改查(方案二)
- EF通用增删改查分页帮助类
- EF 通用数据层 增删改查操作,泛型类II
- EF映射增删改查—版本问题
- ibatis学习笔记——增删查改技术
- GreenDao学习笔记——初始化和增删改查
- ajaxfileupload对于json格式处理的问题(firefox、ie)
- 科目三靠边停车驾驶流程
- 【读书笔记】iOS6编程实战 8绘图功能1
- Cookie 的使用
- 科目三电子路考易错细节总结
- EF学习笔记——通用增删改查方案
- 狗墙网大事记
- 科目三夜考考试内容及过关攻略
- SpringMVC学习历程--SpringMVC第一个例子
- [换汽水]sdut 2844 Mineral Water
- PHP设计模式(一)
- HDU 1848 Fibonacci again and again(SG函数的应用)
- 科目三场外考试易出错的环节
- Linux Shell脚本应用——初识 shell