ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework
在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了AutoMapper,日志组件等,接下来我们将使用Entity Framework完善系统的持久化存储部分。这篇EF的构造,我将以一种快速集成的方式实现,并提供超多的Linq公共方法供业务使用。
Nuget引入EF
在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=**" />
创建表
创建表以及Entity
对应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<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
//methods
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,并实现CRUD
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 发布
ASP.NET MVC5实现芒果分销后台管理系统(二):Code First快速集成EntityFramework的更多相关文章
- ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net
在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作.要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利. 系统结构 整个系统工程结构 ...
- 使用ASP.NET MVC 5快速实现芒果分销后台管理系统(前言)
### 前言 在前一篇文章中,我提到最近要陆续为大家写一些.Net实战技术文章.从今天起,我将围绕一个入门级现实的芒果分销管理系统案例,使用ASP.NET MVC 5,从前端到后端,一步一步为大家呈现 ...
- 最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1,包含asp.net MVC5示例代码,做管理系统最佳的选择。
下载地址:http://download.csdn.net/download/wulang1988/10039402 最新版 INSPINIA IN+ - WebApp Admin Theme v2. ...
- asp.net EF+MVC+Bootstrap 通用后台管理系统
需要源码,请加QQ:858-048-581 开发环境: VS2012或以上 数据库: SQL Server 2008R2或以上 基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)
前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...
- 【共享单车】—— React后台管理系统开发手记:Redux集成开发
前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...
- 基于VUE实现的新闻后台管理系统-二
基础环境及最后的开发效果已完成说明,接下来就开始配置. ¶npm初始化 新建项目文件夹VueDemo,在其内执行如下脚本 npm init -y 安装vue-cli构建包 yarn add vue-c ...
- Vue+element搭建后台管理系统-二、安装插件
我们继续上一章的内容,上一章讲到我们已经能将项目成功跑起来了,那么我们接下来把项目必用的东西完善一下. 一.安装elementUI 终于到了我们的男二了,继续在VSCode中新建一个终端,然后通过这个 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)
前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...
随机推荐
- 吴裕雄--天生自然python编程:实例(1)
str = "www.runoob.com" print(str.upper()) # 把所有字符中的小写字母转换成大写字母 print(str.lower()) # 把所有字符中 ...
- JAVA 截图+tess4j识别
我们先来看看要识别的图片和效果图 效果图: 图片识别需要用到tess4j这个包,下面是下载地址: https://share.weiyun.com/5Hjv13T 我们拿到包以后解压出来,随便你放到哪 ...
- FPGA小白学习之路(6)串口波特率问题的处理
串口波特率问题的处理 此博文一共包含三个方面的内容:(1)异步串口通信的数据格式:(2)为何串口通信中接收端采样时钟频率是传输的波特率的16倍:(3)串口波特率等概念. 1.异步串口通信的数据格式 串 ...
- Spring AOP使用方式
AOP:全称是Aspect Oriented Programming,面向切面编程 Spring AOP的作用和优势: 作用:在程序运行期间,不修改源码对已有方法进行增强 优势:减少重复代码:提高开发 ...
- iOS 开发富文本之TTTAttributedLabel 在某个特定位置的文字添加跳转,下划线,修改字体大小,颜色
@property(nonatomic , strong) TTTAttributedLabel * ttLabel; @property(nonatomic , strong) NSRange li ...
- 手把手教你如何用MSF进行后渗透测试!
在对目标进行渗透测试的时候,通常情况下,我们首先获得的是一台web服务器的webshell或者反弹shell,如果权限比较低,则需要进行权限提升:后续需要对系统进行全面的分析,搞清楚系统的用途:如果目 ...
- 微信小程序从开发至发布的流程
今天在公司将这几天开发的小程序,进行版本上线,在这里记录下. 首先,将微信开发工具里的代码上传到微信小程序平台里,如下所示 之后,在微信小程序平台进行审核提交,填写相应的信息即可,注意,审核提交分为紧 ...
- Git 相关问题分享,git reset与git revert的区别?
1.如果我在git add 后想要撤销操作,该怎么做? 使用 git rm --cache [文件名/ *] 或者 git reset HEAD, 为什么这个命令也会有效果呢,实际上reset将 HE ...
- 使用IDEA创建Maven整合SSM
创建数据库 CREATE DATABASE `ssmbuild`; USE `ssmbuild`; DROP TABLE IF EXISTS `books`; CREATE TABLE `books` ...
- Python 中的集合 --set
前言 在Python中,我们用[]来表示列表list,用()来表示元组tuple,那{}呢?{}不光可用来定义字典dict,还可以用来表示集合set. 集合 set 集合(set)是一个无序的不重复元 ...