HTML5技术

ASP.NET5+EntityFramework7开发实践(一) - GiveCase(2)

字号+ 作者:H5之家 来源:博客园 2015-10-28 09:33 我要评论( )

IRoleRepository : IDisposable 2 { 3 // IEnumerable和IQueryable 4 // 二者在EF都会延迟加载,不同的是: 5 // IEnumerable是数据加载到内存,刷选在内存中的数据上执行 6 // IQueryable是查询和刷选在数据源中执

IRoleRepository : IDisposable 2 { 3 //IEnumerable和IQueryable 4 //二者在EF都会延迟加载,不同的是: 5 //IEnumerable是数据加载到内存,刷选在内存中的数据上执行 6 //IQueryable是查询和刷选在数据源中执行 TODO:复杂条件查询和异步方法 IEnumerable<Role> GetRoles(); 12 Role GetRole(int? id); 13 void Create(Role role); 14 void Update(Role role); 15 void Delete(int? id); 16 }

    其实现代码:

RoleRepository : IRoleRepository 2 { 3 private EFContext db; 4 public RoleRepository(EFContext _db) 5 { 6 db = _db; 7 } IEnumerable<Role> GetRoles() 10 { 11 return db.Roles.ToList(); 12 } Role GetRole(int? id) 15 { 16 return db.Roles.Single(m => m.Id == id); 17 } Create(Role role) 20 { 21 db.Roles.Add(role); 22 db.SaveChanges(); 23 } Delete(int? id) 26 { 27 db.Roles.Remove(db.Roles.Single(m => m.Id == id)); 28 db.SaveChanges(); 29 } Update(Role role) 32 { 33 db.Update(role); 34 db.SaveChanges(); 35 } public void Save() 38 //{ 39 // db.SaveChanges(); 释放资源 disposed = false; Dispose(bool disposing) 45 { 46 if (!disposed) 47 { 48 if (disposing) { db.Dispose(); } 49 } 50 disposed = true; 51 } Dispose() 53 { 54 Dispose(true); 55 System.GC.SuppressFinalize(this); 56 } }

 9.工作单元模式

    工作单元的目的,保证多个数据仓库一起操作保持一致。先创建接口:    

IUnitOfWork 2 { SaveChanges(); 5 }

    其实现:

UnitOfWork : DbContext, IUnitOfWork 2 { SaveChanges() 4 { 5 base.SaveChanges(); 6 } 7 }

 10.仓库基类封装

      基类封装:

BaseRepository 2 { 3 protected IUnitOfWork UnitOfWork { get; set; } EFContext db 6 { 7 get { return (EFContext)UnitOfWork; } 8 } BaseRepository(IUnitOfWork _unitOfWork) 11 { 12 if (_unitOfWork == null) 13 { ArgumentNullException(); 15 } 16 17 UnitOfWork = _unitOfWork; 18 } Save() 21 { 22 db.SaveChanges(); 23 } DbSet<TEntity> GetDbSet<TEntity>() where TEntity : class 26 { 27 return db.Set<TEntity>(); 28 } SetEntityState(object entity, EntityState entityState) 31 { 32 db.Entry(entity).State = entityState; 33 } 34 }

 11.小结

    篇幅有些长了,下一章再说控制器基类封装,依赖注入,界面展示…… 

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • HTML5 进阶系列:拖放 API 实现拖放排序 - _林鑫

    HTML5 进阶系列:拖放 API 实现拖放排序 - _林鑫

    2017-05-02 11:02

  • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    2017-04-30 16:00

  • 在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

    在Delphi下使用迅雷APlayer组件进行免注册开发 - Delphi力量

    2017-04-28 15:00

  • 随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 - 在路在的张

    随应潮流-基于ABP+Angularjs现代化应用软件开发框架(1)-总体介绍 -

    2017-04-22 08:04

网友点评
j