ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework

抗争的小墨   2020-03-22 我要评论
在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来我们将使用Entity Framework完善系统的持久化存储部分。这篇EF的构造,我将以一种快速集成的方式实现,并提供超多的Linq公共方法供业务使用。 ### Nuget引入EF 在XiaoMo.Repository工程里,右键工程使用Nuget引入EntityFramework ,这里我使用最新的6.4版本 ![file](https://img2020.cnblogs.com/other/508250/202003/508250-20200322193009296-1193500334.jpg) 在XiaoMo.Service的Web.config里,添加Sql Server连接字符串(AppSetting内) 创建表 ### 创建表以及Entity ![file](https://img2020.cnblogs.com/other/508250/202003/508250-20200322193010075-678526567.jpg) 对应Entity [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; } } ### EF关键配置 创建数据库交互上下文DatabaseContext.cs,初始化时指定连接。这里因为我们先用数据库表,所以我们使用Database.SetInitializer(null); 使用空策略初始化EF 。添加DBSet,用于操作表。 public class DatebaseContext : DbContext { static string ConnectionString = ""; static DatebaseContext() { Database.SetInitializer(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 Records { get; set; } public virtual DbSet User { get; set; } } 添加数据交互接口,这里只列出几个关键接口方法 public interface IRepository{} public interface IRepository : IRepository where TEntity : class //methods T Query(Func, T> queryMethod); TEntity FirstOrDefault(Expression> predicate); TEntity Load(TPrimaryKey id); bool Exist(Expression> predicte); TEntity Insert(TEntity entity); TEntity Update(TEntity entity); 创建RepositoryManager.cs,封装DatabaseContext,并实现CRUD public class RepositoryManager : IDisposable 创建RepositoryEntityBase.cs,作为所有Dao层的公共基类,以供继承映射数据库实体。 public class RepositoryEntityBase : IRepository where TEntity : class 创建OrderDao public class OrdersDao : RepositoryEntityBase 这两个文件内容过多,我就不粘贴到这了。 ### 业务访问持久化逻辑 列举几个使用集成好的EF框架交互的例子 1.查询当前用户是否为代理 public bool IsAgent(string username) { using (var repMgr = new RepositoryManager()) { return repMgr.Exist(u => u.UserName == username && u.Role == 1); } } 2.判断用户名密码是否正确 public string SearchUser(string username,string pwd) { using (var repMgr = new RepositoryManager()) { var queryuser = repMgr.FirstOrDefault(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(); 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); return response; } } 4.创建订单 public OrderInfo CreateOrder(OrderInfo order) { using (var repMgr = new RepositoryManager()) { var entity = Mapper.Map(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姿势构建系列,希望大家支持。如需源码,请关注小墨公众号私信,并获取更多小墨精彩分享! 感谢阅读! ![file](https://img2020.cnblogs.com/other/508250/202003/508250-20200320230240633-326314097.jpg) > 本文由博客群发一文多发等运营工具平台 [OpenWrite](https://openwrite.cn?from=article_bottom) 发布

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们