Repository+UnitWork
谈到MVC与EntityFramework,则不得不说一说事务与仓储(Unit of work + Repository)。
仓储(Repository):领域对象集合。用于操作领域对象与数据库上下文(DbContext)的交互(在此不得不说一声,领域对象和数据库表对象还是有区别的。领域对象实际上是一组有业务关系的数据库对象的抽象。最简单的形式就是主表、关系表在同一个领域对象中进行定义。例如我们前几章看到的UserProfile,它即定义了用户信息,又定义了用户角色关系信息)。
事务(Transaction):多个业务处理有必然的顺序性、依赖性,则默认这些业务为一个原子操作。在这里我们使用工作单元,即Unit of work模式,来维护事务的原子性。
首先,先让我们构建仓储接口。为了更好的使用EntityFramework的延迟加载,所有查询集合的接口我们均使用IQueryable接口类型作为返回值。

/// <summary> /// 删除满足表达式的记录 /// </summary> /// <param name="predicate">过滤条件表达式</param> /// <param name="submitImmediately">是否直接提交。默认false。</param> public void Delete(Expression<Func<T, bool>> predicate, bool submitImmediately = false) { try { Context.Configuration.AutoDetectChangesEnabled = false; //关闭数据库上下文的自动更新跟踪功能,可提高批量操作的性能 var objects = Filter(predicate); foreach (var obj in objects) DbSet.Remove(obj); if (submitImmediately) Context.SaveChanges(); } finally { Context.Configuration.AutoDetectChangesEnabled = true; //完成批量操作后,打开数据库上下文的自动更新跟踪功能 } }
}

浙公网安备 33010602011771号