ASP.NET MVC5 网站开发框架模型、数据存储、业务逻(3)

这里定义了增、删、改、判断存在、返回模型的查询、返回集合的查询,返回分页集合的查询7个公共方法。这几个方法基本满足一般需要,特殊的方法在继承的时候再添加。
还使用了泛型,在继承的时候传入实体类型就可以直接继承这些方法了。具体看下InterfaceUserRepository接口就清楚了。

using Ninesky.Models; namespace Ninesky.IDAL { /// <summary> /// 用户接口 /// <remarks>创建:2014.02.03</remarks> /// </summary> public interface InterfaceUserRepository:InterfaceBaseRepository<User> { } }

简单吧,继承自InterfaceBaseRepository接口并传入实体类User就行了。我们在类视图中看下,是不是继承了基类的接口。

ASP.NET MVC5 网站开发框架模型、数据存储、业务逻

2、DAL项目
DAL项目是对IDAL项目接口的实现,项目中要创建DbContext类,对于DbContext类很多人讨论过它对数据库存取的效率,MSDN中说其是轻量的, 创建不需要很大开销,它也不是线程安全的对象,并且具有数据容器的性质(跟踪),因此很多人认为不应该将其静态化、单例化。但是对用户的单次请求来说实现DbContext唯一是合理的。 先看代码吧,非常简单。

using Ninesky.Models; using System.Data.Entity; namespace Ninesky.DAL { /// <summary> /// 数据上下文 /// <remarks>创建:2014.02.03</remarks> /// </summary> public class NineskyDbContext:DbContext { public DbSet<User> Users { get; set; } public DbSet<UserGroup> UserGroups { get; set; } public DbSet<UserConfig> UserConfig { get; set; } public NineskyDbContext() : base("DefaultConnection") { } } }

下面创建一个BaseRepository类,继承自InterfaceBaseRepository并实现类其接口的方法。

using Ninesky.IDAL; using System; using System.Linq; using System.Linq.Expressions; namespace Ninesky.DAL { /// <summary> /// 仓储基类 /// <remarks>创建:2014.02.03</remarks> /// </summary> public class BaseRepository<T>: InterfaceBaseRepository<T> where T : class { protected NineskyDbContext nContext = ContextFactory.GetCurrentContext(); public T Add(T entity) { nContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Added; nContext.SaveChanges(); return entity; } public int Count(Expression<Func<T, bool>> predicate) { return nContext.Set<T>().Count(predicate); } public bool Update(T entity) { nContext.Set<T>().Attach(entity); nContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Modified; return nContext.SaveChanges() > 0; } public bool Delete(T entity) { nContext.Set<T>().Attach(entity); nContext.Entry<T>(entity).State = System.Data.Entity.EntityState.Deleted; return nContext.SaveChanges() > 0; } public bool Exist(Expression<Func<T, bool>> anyLambda) { return nContext.Set<T>().Any(anyLambda); } public T Find(Expression<Func<T, bool>> whereLambda) { T _entity = nContext.Set<T>().FirstOrDefault<T>(whereLambda); return _entity; } public IQueryable<T> FindList<S>(Expression<Func<T, bool>> whereLamdba, bool isAsc, Expression<Func<T, S>> orderLamdba) { var _list = nContext.Set<T>().Where<T>(whereLamdba); if (isAsc) _list = _list.OrderBy<T, S>(orderLamdba); else _list = _list.OrderByDescending<T, S>(orderLamdba); return _list; } public IQueryable<T> FindPageList<S>(int pageIndex, int pageSize, out int totalRecord, Expression<Func<T, bool>> whereLamdba, bool isAsc, Expression<Func<T, S>> orderLamdba) { var _list = nContext.Set<T>().Where<T>(whereLamdba); totalRecord = _list.Count(); if (isAsc) _list = _list.OrderBy<T, S>(orderLamdba).Skip<T>((pageIndex - 1) * pageSize).Take<T>(pageSize); else _list = _list.OrderByDescending<T, S>(orderLamdba).Skip<T>((pageIndex - 1) * pageSize).Take<T>(pageSize); return _list; } } }

代码中都是对数据库的操作。比较有看头的是这句protected NineskyDbContext nContext = ContextFactory.GetCurrentContext();

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjwxsp.html