在上一篇文章中,我们已经搭建了整个芒果后台管理系统整个工程架构,并集成了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的更多相关文章

  1. ASP.NET MVC5实现芒果分销后台管理系统(一):系统结构设计,集成AutoMapper,Log4net

    在构思完系统思维脑图后,小墨回到家中,便摩拳擦掌开始了开发工作.要想迅速完成系统开发,前期系统设计和准备尤其重要,因为小墨做过太多大大小小的业务系统,准备工作也是十分顺利. 系统结构 整个系统工程结构 ...

  2. 使用ASP.NET MVC 5快速实现芒果分销后台管理系统(前言)

    ### 前言 在前一篇文章中,我提到最近要陆续为大家写一些.Net实战技术文章.从今天起,我将围绕一个入门级现实的芒果分销管理系统案例,使用ASP.NET MVC 5,从前端到后端,一步一步为大家呈现 ...

  3. 最新版 INSPINIA IN+ - WebApp Admin Theme v2.7.1,包含asp.net MVC5示例代码,做管理系统最佳的选择。

    下载地址:http://download.csdn.net/download/wulang1988/10039402 最新版 INSPINIA IN+ - WebApp Admin Theme v2. ...

  4. asp.net EF+MVC+Bootstrap 通用后台管理系统

    需要源码,请加QQ:858-048-581 开发环境: VS2012或以上 数据库: SQL Server 2008R2或以上   基于EF+MVC+Bootstrap构建通用后台管理系统,集成轻量级 ...

  5. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)

    前言: 在本系列第一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)>中,我为大家介绍了搭建空白解决方案以 ...

  6. 【共享单车】—— React后台管理系统开发手记:Redux集成开发

    前言:以下内容基于React全家桶+AntD实战课程的学习实践过程记录.最终成果github地址:https://github.com/66Web/react-antd-manager,欢迎star. ...

  7. 基于VUE实现的新闻后台管理系统-二

    基础环境及最后的开发效果已完成说明,接下来就开始配置. ¶npm初始化 新建项目文件夹VueDemo,在其内执行如下脚本 npm init -y 安装vue-cli构建包 yarn add vue-c ...

  8. Vue+element搭建后台管理系统-二、安装插件

    我们继续上一章的内容,上一章讲到我们已经能将项目成功跑起来了,那么我们接下来把项目必用的东西完善一下. 一.安装elementUI 终于到了我们的男二了,继续在VSCode中新建一个终端,然后通过这个 ...

  9. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](三)

    前言 上一篇<一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](二)>我们通过如下操作: 创建实体及工具类 创建Re ...

随机推荐

  1. [洛谷P3386] [模板] 二分图匹配 (匈牙利算法)

    题目传送门 毒瘤出题人zzk出了个二分图匹配的题(18.10.04模拟赛T2),逼我来学二分图匹配. 网络流什么的llx讲完之后有点懵,还是匈牙利比较好理解(绿与被绿). 对于左边的点一个一个匹配,记 ...

  2. Android中的AlertDialog和ProgressDialog用法

    手机APP对话框是很多APP都有的下面来看下怎么实现的吧, 打开Android studio 然他自动创建好布局和类; 下面我们修改activity_main.xml中的代码 <?xml ver ...

  3. 语言发展与python

    编程语言的发展史(机械语言.汇编语言.高级语言) 机械语言:直接使用二进制与计算机沟通,直接操作硬件,执行效率高,开发效率低. 汇编语言:用简单的英文代替二进制,直接操作硬件,执行效率较机械语言低,开 ...

  4. angular知识点(2)

    angular知识点(2) 1.为了代码规范,对于需要自动加载的依赖,需要在前面加上注释,注释为://@ngInject 或者是/*@ngInject*/ 2.ngSwitch的应用 在需要用到选择出 ...

  5. 自动贩卖机VS无人门店:谁是真正的零售新风口?

    ​ ​原本在线上不断发力,让实体店几乎凋敝的电商,却忽然对线下兴趣大增.阿里疯狂入股.收购线下商超:京东要在全国范围内开设百万家便利店,仅在农村就将开设50万家--这一股浪潮,或将直接改变整个百货零售 ...

  6. 分析Android中View的工作流程

    在分析View的工作流程时,需要先分析一个很重要的类,MeasureSpec.这个类在View的测量(Measure)过程中会用到. MeasureSpec MeasureSpec是View的静态内部 ...

  7. python爬虫-提取网页数据的三种武器

    常用的提取网页数据的工具有三种xpath.css选择器.正则表达式 1.xpath 1.1在python中使用xpath必须要下载lxml模块: lxml官方文档 :https://lxml.de/i ...

  8. Mongodb 对于Sort排序能够支持的最大内存限制查看和修改

    MongoDB Server对于Sort排序能够支持的最大内存限制查看: > use admin switched to db admin >db.runCommand({ getPara ...

  9. #2020.1.26笔记——springdatajpa

    2020.1.26笔记--springdatajpa 使用jpa的步骤: 1. 导入maven坐标 <?xml version="1.0" encoding="UT ...

  10. 使用EventBus + Redis发布订阅模式提升业务执行性能

    前言 最近一直奔波于面试,面了几家公司的研发.有让我受益颇多的面试经验,也有让我感觉浪费时间的面试经历~因为疫情原因,最近宅在家里也没事,就想着使用Redis配合事件总线去实现下具体的业务. 需求 一 ...