asp.net mvc + dapper + oracle + autofac + repository + adminlte3.0

今天,我们来做一个asp.net mvc5 的事例项目,项目比较简单。

1.数据库我们使用oracle11G,因为很多文章介绍中都是使用sqlserver或者是mysql数据库,使用oracle的还是比较少,所以这里我合用oracle数据库。

2.通过使用dapper (orm)连接数据库并读取数据,Dapper是一个轻量级的ORM(对象关系映射)框架,用于将数据库中的数据映射到.NET应用程序中的对象模型。它可以与多种关系型数据库(如SQL Server、MySQL、Oracle等)一起使用,并提供了简单、快速的方法来执行基本的CRUD操作(增删改查),同时也支持存储过程和动态SQL。Dapper相对于其他ORM框架的优点是速度更快、更轻量级、更易于学习和使用。

3.使用autofac 来进行依赖注入。依赖注入(DI)是一种设计模式,它可以用来解决以下问题:

   3.1.松耦合:依赖注入可以减少类之间的耦合度,使类之间的关系更加松散。通过将依赖项注入、分离和管理,可以更容易地替换、更新或删除依赖项,而不会影响其他类。

   3.2.可测试性:依赖注入可以使代码更易于测试。通过注入模拟对象或依赖项,可以更轻松地模拟和测试代码,从而提高代码的可测试性和可维护性。

   3.3.可复用性:依赖注入可以使代码更容易重用。通过将依赖项注入到一个类中,可以更容易地将这个类用于不同的场景和应用程序中。

  3.4.可扩展性:依赖注入可以使代码更容易扩展。通过注入新的依赖项,可以很容易地添加新的功能或修改现有功能。

      我在这里使用依赖注入主要是可以使代码更加灵活、易于测试、可重用和可扩展,从而提高代码的质量和可维护性。

4.使用repository仓储层开发模式。仓库(Repository)是一个将应用程序与数据源隔离开来的模式,使得应用程序与底层数据源之间的交互完全由仓库进行。

      仓库层开发模式是指在应用程序中,数据从数据库或其他数据源中获取时,通过定义一个仓库层来实现这个过程。该层通常是一个中间层,通过处理业务逻辑和数据操作来实现应用程序的各种功能。 

      在仓库层模式中,应用程序和数据源之间的通信完全由仓库层进行处理。这使得仓库层可以轻松地更改底层数据源,而不会对应用程序产生任何影响。

      在仓库层开发模式中,通常会使用一些设计模式来实现数据的存储和检索,例如工厂模式、单例模式、观察者模式等。

5.使用 Oracle.ManagedDataAccess 连接 Oracle 数据库,Oracle.ManagedDataAccess 是一个针对 .NET 程序开发的数据库访问驱动库,此驱动为我们提供了一系列的类和方法,用于连接、查询和操作 Oracle 数据库。相较于以往的驱动程序(如 Oracle.DataAccess), Oracle.ManagedDataAccess 具有更好的性能、更高的稳定性和更好的兼容性,而且最方便的是它可以直接数据库,也不用安装ORACLE客户端程序。并且支持在各种操作系统中运行,为我们提供了极大的便利。

6.前端界面使用adminlte3.0来做展示。adminlte是一个非常流行的前端框架,最主要是它是免费的,最新版的adminlte3.2比2.x版本速度以及各方面都有了巨大的提升。

    好了,话不多说,开始我们今天的编程之旅吧。

第一步:首先我们在我们的ORACLE数据库中新建一张BOOK的图书表:

-- Create table
create table BOOK
(
  bookid     NUMBER not null,
  isbn       NVARCHAR2(50),
  bookname   NVARCHAR2(200),
  booktype   NVARCHAR2(200),
  author     NVARCHAR2(50),
  publishing NVARCHAR2(50),
  price      NUMBER,
  isdelete   NUMBER,
  updatedate DATE,
  adddate    DATE
)
tablespace USERS
  pctfree 10
  initrans 1
  maxtrans 255
  storage
  (
    initial 64K
    next 1M
    minextents 1
    maxextents unlimited
  );

第二步:启动VS2022或者2019都可以,新建一个MVC的项目,项目名称为BookMvcTest

第三步:通用NUGET包管理程序引入相关的引用库DAPPER, AUTOFAC, ManagedDataAccess

第四步:引入ADMINLTE模板程序,并修改相应的模板。

               直接将整个下载的ADMINLTE拖动到整个程序的根目录下即可。然后新一个一个布局文件,根据需要修改即可。这个比较简单就不上图了,如果有小伙伴对这方面有疑问,下一次专门写一篇这方面的文章。

第五步:在Modes文件夹中添加Book图书类

    public class Book
    {
        public int Bookid { get; set; }
        public string BookName { get; set; }
        public string Isbn { get; set; }
        public string BookType { get; set; }
        public string Author { get; set; }
        public string Publishing { get; set; }
        public decimal Price { get; set; }
        public DateTime? UpdateDate { get; set; }
        public DateTime? AddDate { get; set; }
    }

第六步:在项目中新建Repository目录,这里说明一个,由于是一个小项目,所以仓储层我们就直接建一目录了,而不重新建一个类库项目,如果是大的项目,还是建议大家新建一个类库项目来完成。在此目录中,我们新一个接口文件IRepository ,接口文件中包括常用操作。

    public interface IRepository<T> where T : class
    {
        IEnumerable<T> GetAll(); //获取所有数据
        T GetDetail(int id);  //根据ID获取数据
        int GetCount();  //获取数据总数
        /// <summary>
        /// 数据分页
        /// </summary>
        /// <param name="page"></param>
        /// <param name="limit"></param>
        /// <returns></returns>
        IEnumerable<T> PageListQueryable(int page, int limit);

    }

因为只做一个测试,增删改的操作这里就不一 一写出来了,方法都是相同。

在当前目录中新建BookRepository.cs类,用于Book仓储类。

代码如下:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using BookMvcTest.Models;
using Oracle.ManagedDataAccess.Client;
using Dapper;
namespace BookMvcTest.Repository
{
    public class BookRepository : IRepository<Book>
    {
        public string connectOracle = ConfigurationManager.ConnectionStrings["DbConnectionString"].ConnectionString;
        public IEnumerable<Book> GetAll()
        {
            IEnumerable<Book> books = new List<Book>();
            using (var connection = new OracleConnection(connectOracle))
            {
                connection.Open();
                books = connection.Query<Book>("SELECT count(*) FROM Book");

                connection.Close();
            }
            return books;
        }

        public int GetCount()
        {
            int count = 0;
            using (var connection = new OracleConnection(connectOracle))
            {
                connection.Open();
                var eCount = connection.ExecuteScalar("SELECT count(*) FROM Book");

                count = Convert.ToInt32(eCount);

                connection.Close();
            }
            return count;
        }

        public Book GetDetail(int id)
        {
            Book book = new Book();
            using (var connection = new OracleConnection(connectOracle))
            {
                connection.Open();
                book = connection.QueryFirstOrDefault<Book>($"SELECT * FROM Book where id={id}");

                connection.Close();
            }
            return book;
        }

        public IEnumerable<Book> PageListQueryable(int page, int limit)
        {
            IEnumerable<Book> books = new List<Book>();

            string strSql = $"SELECT * FROM(SELECT ROWNUM AS rowno, t.* FROM Employee t WHERE  ROWNUM <= {page * limit}) table_alias WHERE table_alias.rowno >= {(page - 1) * limit}";

            using (var connection = new OracleConnection(connectOracle))
            {
                connection.Open();
                books = connection.Query<Book>(strSql);

                connection.Close();
            }
            int employees_count = 0;

            return books;
        }
    }
}

第七步:在控制器目录中新建一BookControllers控制器,内容如下

现在还不能拿到数据,因为我们还要在WEB启动项目中增加AUTOFAC的代码,让它能够注入到控制器中。

第八步:修改项目根目录下的Global.asax文件,添加AUTOFAC的注入代码。

namespace BookMvcTest
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            var builder = new ContainerBuilder();
            builder.RegisterType<BookRepository>().As<IRepository<Book>>();
            builder.RegisterType<HomeController>();
            builder.RegisterType<BookController>();
            IContainer Container = builder.Build();
            DependencyResolver.SetResolver(new AutofacDependencyResolver(Container));
        }
    }
}

第九步:进入BookControllers控制器中,在public ActionResult Index()方法上点右键,添加视图:

第十步:在添加视图的选项中,按下图所示选择:

好了,添加完成后,小伙伴们直接点击VS主菜单中的调试程序,就可以在浏览器中看到结果啦!有不明白的,可以留言。针对相关问题,发详图。
  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值