在上一篇文章中,咱们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来咱们将使用Entity Framework完善系统的持久化存储部分。这篇EF的构造,我将以一种快速集成的方式实现,并提供超多的Linq公共方法供业务使用。sql
在XiaoMo.Repository工程里,右键工程使用Nuget引入EntityFramework ,这里我使用最新的6.4版本数据库
在XiaoMo.Service的Web.config里,添加Sql Server链接字符串(AppSetting内)后端
<add key="conStr" value="Server=10.60.215.202;Database=mango_sys;Persist Security Info=True;User ID=sa;Password=**" />
建立表架构
对应Entityapp
[Table("Orders")] public class OrderInfoEntity { public int Id { get; set; } public DateTime OptTime { get; set; } public string Address { get; set; } public string Uuid { get; set; } public string AcceptUser { get; set; } public string TelephoneNumber { get; set; } public string ProductName { get; set; } public int Number { get; set; } public double Price { get; set; } public double Sum { get; set; } public string PackCompany { get; set; } public string PackNumber { get; set; } public string Status { get; set; } public string ExpressNumber { get; set; } }
建立数据库交互上下文DatabaseContext.cs,初始化时指定链接。这里由于咱们先用数据库表,因此咱们使用Database.SetInitializer<DatebaseContext>(null); 使用空策略初始化EF 。添加DBSet,用于操做表。框架
public class DatebaseContext : DbContext { static string ConnectionString = ""; static DatebaseContext() { Database.SetInitializer<DatebaseContext>(null); } public DatebaseContext(string connStr) : base(connStr) { } public DatebaseContext() : base(GetConnectionString()) { } private static string GetConnectionString() { if (string.IsNullOrEmpty(ConnectionString)) { ConnectionString = ConfigurationManager.AppSettings["conStr"].ToString(); } return ConnectionString; } public virtual DbSet<OrderInfoEntity> Records { get; set; } public virtual DbSet<UsersEntity> User { get; set; } }
添加数据交互接口,这里只列出几个关键接口方法工具
public interface IRepository{} public interface IRepository<TEntity> : IRepository where TEntity : class
//methodsui
T Query<T>(Func<IQueryable<TEntity>, T> queryMethod); TEntity FirstOrDefault(Expression<Func<TEntity, bool>> predicate); TEntity Load<TPrimaryKey>(TPrimaryKey id); bool Exist(Expression<Func<TEntity, bool>> predicte); TEntity Insert(TEntity entity); TEntity Update(TEntity entity);
建立RepositoryManager.cs,封装DatabaseContext,并实现CRUDspa
public class RepositoryManager : IDisposable
建立RepositoryEntityBase.cs,做为全部Dao层的公共基类,以供继承映射数据库实体。代理
public class RepositoryEntityBase<TEntity> : IRepository<TEntity> where TEntity : class
建立OrderDao
public class OrdersDao : RepositoryEntityBase<OrderInfoEntity>
这两个文件内容过多,我就不粘贴到这了。
列举几个使用集成好的EF框架交互的例子
1.查询当前用户是否为代理
public bool IsAgent(string username) { using (var repMgr = new RepositoryManager()) { return repMgr.Exist<UsersEntity>(u => u.UserName == username && u.Role == 1); } }
2.判断用户名密码是否正确
public string SearchUser(string username,string pwd) { using (var repMgr = new RepositoryManager()) { var queryuser = repMgr.FirstOrDefault<UsersEntity>(u => u.UserName == username && u.Password == pwd); } }
3.分页查询订单
public QueryResponse Query(QueryRequest request) { using (var repMgr = new RepositoryManager()) { var response = new QueryResponse(); var query = repMgr.Query<OrderInfoEntity>(); int count = query.Count(); var results = query.OrderByDescending(s => s.OptTime).Skip((request.CurrentPage - 1) * request.PageSize).Take(request.PageSize); var entities = results.ToList(); response.TotalCount = count; response.Result = entities.ConvertAll(Mapper.Map<OrderInfoEntity, OrderInfo>); return response; } }
4.建立订单
public OrderInfo CreateOrder(OrderInfo order) { using (var repMgr = new RepositoryManager()) { var entity = Mapper.Map<OrderInfo, OrderInfoEntity>(order); repMgr.Insert(entity); repMgr.Commit(); order.Id = entity.Id; } }
整个数据库的查询和操做至关简单。这里您可能会问,若是有一些复杂的Sql语句,要怎么写,这里咱们在RepositoryManager.cs里提供执行Sql语句的方法,只须要把sql与参数传递进来便可
public int ExecuteSqlCommand(string sql, params object[] args) { return Context.Database.ExecuteSqlCommand(sql, args); }
若是有新的业务接入,那咱们只须要在DatebaseContext中加入新的DBSet,建立对应Entity与表,其余不须要任何改动,整个EF的接入是超级便捷的。
以上为你们实现系统集成EF的关键配置代码,因为篇幅较长,部分源码我并未粘贴全,你们若是感兴趣,能够私信小墨公众号,联系,下一节咱们将继续芒果系统的快速搭建,IOC集成Castle。整个系列我将面向入门级新手,以实战干货角度为你们陆续呈现,以后将为你们呈现以.Net Core MVC姿式构建系列,但愿你们支持。如需源码,请关注或搜索小墨公众号"后端技术干货大全",私信做者,以获取更多小墨技术文章及程序人生!
感谢阅读!
感谢阅读!
本文由博客群发一文多发等运营工具平台 OpenWrite 发布