• 轻量ORM-SqlRepoEx (七)AspNetCore应用


    ORM-SqlRepoEx .Net平台下兼容.NET Standard 2.0,一个实现以Lambda表达式转转换标准SQL语句,使用强类型操作数据的轻量级ORM工具,在减少魔法字串同时,通过灵活的Lambda表达式组合,实现业务数据查询的多样性。

    ORM-SqlRepoEx 也是一个极易使用的工具,通过在AspNetCore中的应用可以展示。

     本案例源码在:

    https://github.com/AzThinker/SqlRepoEx2.0DemoForAspCore

    https://gitee.com/azthinker/SqlRepoEx2.0DemoForAspCore

    源码部分代码是使用代码工具生成

    https://github.com/AzThinker/CodeToolSolution

    1、新建一个AspNetCore项目

    2、通过Nuget下载SqlRepoEx库、由于本例中是AspNetCore.Mvc项目,案例中使用的是SQL ServerNorthwind数据库,所以选择下载

     SqlRepoEx.MsSql.ServiceCollection

     

    3、在Startup.cs文件的public void ConfigureServices(IServiceCollection services)中添加

                 string ConnectionString = "Data Source=(Local);Initial Catalog=Northwind;User ID=test;Password=test";

                services.AddSimpleSqlRepo(ConnectionString);

     

    4、增加一个简单类AzCustomers,其属性来源于 Customers 表。为使SqlRepoEx 精准访问,增加特性标识  [TableName("Customers")]

     1 using System;
     2 using SqlRepoEx.Core.CustomAttribute;
     3 
     4 // 客户 业务类
     5 namespace DemoTools.BLL.DemoNorthwind
     6 {
     7     [TableName("Customers")]
     8     /// <summary>
     9     /// 客户 业务类
    10     /// </summary>
    11     public sealed class AzCustomers
    12     {
    13         public string CustomerID { get; set; }
    14 
    15         public string CompanyName { get; set; }
    16 
    17         public string ContactName { get; set; }
    18 
    19         public string ContactTitle { get; set; }
    20 
    21         public string Address { get; set; }
    22 
    23         public string City { get; set; }
    24 
    25         public string Region { get; set; }
    26 
    27         public string PostalCode { get; set; }
    28 
    29         public string Country { get; set; }
    30 
    31         public string Phone { get; set; }
    32 
    33         public string Fax { get; set; }
    34 
    35     }
    36 }
    View Code

    5、增加一人简单的列表类 AzCustomersList,其中实现了IPagedList接口,此接口是Webdiyer.WebControls.AspNetCore分页控件中定义,由于Webdiyer.WebControls.AspNetCore的源码不支持core2.1,所以重新编译,并将源码加工程中。

    using System;
    using System.Collections.Generic;
    using Webdiyer.WebControls.AspNetCore;
    
    //客户列表类
    namespace DemoTools.BLL.DemoNorthwind
    {
        /// <summary>
        /// 客户  列表类
        /// </summary>
        public class AzCustomersList : List<AzCustomers>, IPagedList
        {
            public string DisplayDescription = "客户";
            public int PageSize { get; set; }
            public int TotalItemCount { get; set; }
            public int CurrentPageIndex { get; set; }
    
            public static AzCustomersList GetModelList((IEnumerable<AzCustomers> QueryResult, int PageCount) queryresult, int pageSize, int currentPageIndex)
            {
                AzCustomersList models = new AzCustomersList();
                models.AddRange(queryresult.QueryResult);
                models.TotalItemCount = queryresult.PageCount;
                models.PageSize = pageSize;
                models.CurrentPageIndex = currentPageIndex;
                return models;
            }
        }
    }
    View Code

    6、增加一个控制器并在控制器的构造方法 AzCustomersController(IRepositoryFactory repositoryFactory)IRepositoryFactorySqlRepoEx 工厂类的接口,由于前面(第2条中)已经注册了SqlRepoEx 所需的依赖,此处仅需在构造中加入此接口即可。

      1 using System.Linq;
      2 using DemoTools.BLL.DemoNorthwind;
      3 using Microsoft.AspNetCore.Authorization;
      4 using Microsoft.AspNetCore.Mvc;
      5 using SqlRepoEx.Abstractions;
      6 
      7 // 客户 控制器
      8 namespace DemoTools.WebUI.DemoNorthwind.Controllers
      9 {
     10     /// <summary>
     11     /// 客户
     12     /// </summary>
     13     public class AzCustomersController : Controller
     14     {
     15         IRepositoryFactory repositoryFactory;
     16         IRepository<AzCustomers> repository;
     17         public AzCustomersController(IRepositoryFactory repositoryFactory)
     18         {
     19             this.repositoryFactory = repositoryFactory;
     20             this.repository = repositoryFactory.Create<AzCustomers>();
     21         }
     22 
     23         /// <summary>
     24         /// 返回 客户 列表
     25         /// 异步调用数据,其异步部分明细View没有Controller只有View
     26         /// </summary>
     27         public IActionResult Index(int pageindex = 1)
     28         {
     29             var queryresult = repository.Query()
     30              .Select(s => s.CustomerID
     31                         , s => s.CompanyName
     32                         , s => s.ContactName
     33                         , s => s.ContactTitle
     34                         , s => s.Address
     35                         , s => s.City
     36                         , s => s.Region
     37                         , s => s.PostalCode
     38                         , s => s.Country
     39                         , s => s.Phone
     40                         , s => s.Fax
     41                 ).OrderBy(o => o.CustomerID).Page(20, pageindex).PageGo();
     42             var model = AzCustomersList.GetModelList(queryresult, 20, pageindex);
     43             string xrh = Request.Headers["X-Requested-With"];
     44             if (!string.IsNullOrEmpty(xrh) && xrh.Equals("XMLHttpRequest", System.StringComparison.OrdinalIgnoreCase))
     45             {
     46                 return PartialView("DetailsPage", model);
     47             }
     48             return View(model);
     49         }
     50 
     51         /// <summary>
     52         /// 增加客户
     53         /// </summary>
     54         public ActionResult Create()
     55         {
     56             var model = new AzCustomers();
     57             return View(model);
     58         }
     59 
     60         /// <summary>
     61         /// 增加保存客户
     62         /// </summary>
     63         [HttpPost, ValidateAntiForgeryToken]
     64         [ActionName("Create")]
     65         public IActionResult CreatePost(AzCustomers model)
     66         {
     67             if (ModelState.IsValid)
     68             {
     69                 repository.Insert().With(s => s.CustomerID, model.CustomerID)
     70                          .With(s => s.CompanyName, model.CompanyName)
     71                          .With(s => s.ContactName, model.ContactName)
     72                          .With(s => s.ContactTitle, model.ContactTitle)
     73                          .With(s => s.Address, model.Address)
     74                          .With(s => s.City, model.City)
     75                          .With(s => s.Region, model.Region)
     76                          .With(s => s.PostalCode, model.PostalCode)
     77                          .With(s => s.Country, model.Country)
     78                          .With(s => s.Phone, model.Phone)
     79                          .With(s => s.Fax, model.Fax)
     80                  .Go();//按增加保存 
     81                 return RedirectToAction("Index");
     82             }
     83             return View(model);
     84         }
     85 
     86         /// <summary>
     87         /// 编辑客户
     88         /// </summary>
     89         public IActionResult Edit(string Id)
     90         {
     91             var model = repository.Query()
     92                     .Select(s => s.CustomerID
     93                             , s => s.CompanyName
     94                             , s => s.ContactName
     95                             , s => s.ContactTitle
     96                             , s => s.Address
     97                             , s => s.City
     98                             , s => s.Region
     99                             , s => s.PostalCode
    100                             , s => s.Country
    101                             , s => s.Phone
    102                             , s => s.Fax
    103                      ).Where(s => s.CustomerID == Id).Go().FirstOrDefault();
    104             return View(model);
    105         }
    106 
    107         /// <summary>
    108         ///  保存编辑的客户
    109         /// </summary>
    110         [HttpPost, ValidateAntiForgeryToken]
    111         [ActionName("Edit")]
    112         public IActionResult EditPost(AzCustomers model)
    113         {
    114             if (ModelState.IsValid)
    115             {
    116                 repository.Update().Set(s => s.CustomerID, model.CustomerID)
    117                         .Set(s => s.CompanyName, model.CompanyName)
    118                         .Set(s => s.ContactName, model.ContactName)
    119                         .Set(s => s.ContactTitle, model.ContactTitle)
    120                         .Set(s => s.Address, model.Address)
    121                         .Set(s => s.City, model.City)
    122                         .Set(s => s.Region, model.Region)
    123                         .Set(s => s.PostalCode, model.PostalCode)
    124                         .Set(s => s.Country, model.Country)
    125                         .Set(s => s.Phone, model.Phone)
    126                         .Set(s => s.Fax, model.Fax)
    127             .Go();//按增加保存 
    128                 return RedirectToAction("Index");
    129             }
    130             return View(model);
    131         }
    132 
    133         /// <summary>
    134         /// 显示客户单个记录
    135         /// </summary>
    136         public IActionResult Details(string Id)
    137         {
    138             var model = repository.Query()
    139                     .Select(s => s.CustomerID
    140                             , s => s.CompanyName
    141                             , s => s.ContactName
    142                             , s => s.ContactTitle
    143                             , s => s.Address
    144                             , s => s.City
    145                             , s => s.Region
    146                             , s => s.PostalCode
    147                             , s => s.Country
    148                             , s => s.Phone
    149                             , s => s.Fax
    150                      ).Where(s => s.CustomerID == Id).Go().FirstOrDefault();
    151             return View(model);
    152         }
    153 
    154         /// <summary>
    155         /// 独立页面删除客户
    156         /// </summary>
    157         public ActionResult Delete(string Id)
    158         {
    159             var model = repository.Query()
    160                   .Select(s => s.CustomerID
    161                           , s => s.CompanyName
    162                           , s => s.ContactName
    163                           , s => s.ContactTitle
    164                           , s => s.Address
    165                           , s => s.City
    166                           , s => s.Region
    167                           , s => s.PostalCode
    168                           , s => s.Country
    169                           , s => s.Phone
    170                           , s => s.Fax
    171                    ).Where(s => s.CustomerID == Id).Go().FirstOrDefault();
    172             return View(model);
    173         }
    174 
    175         /// <summary>
    176         /// 独立页面删除客户
    177         /// </summary>
    178         [HttpPost, ActionName("Delete")]
    179         public IActionResult DeleteConfirmed(AzCustomers model)
    180         {
    181             repository.Delete().Where(c => c.CustomerID == model.CustomerID).Go();
    182             return RedirectToAction("Index");
    183         }
    184 
    185     }
    186 }
    View Code

    7View的实现和其他代码参见上面给出的地址中的源码。

    总结:从上面看出,对特SqlRepoEx 所需要特定的操作,仅在第2、第3、第6中是必需的

    1)、引用SqlRepoEx.MsSql.ServiceCollection

    2)、 services.AddSimpleSqlRepo(ConnectionString);

    3)、 AzCustomersController(IRepositoryFactory repositoryFactory)

    4)、this.repository = repositoryFactory.Create<AzCustomers>();

    然后就可以轻松的通过SqlRepoEx 访问数据库了。

  • 相关阅读:
    Opencv保存摄像头视频&&各种编码器下视频文件占用空间对比
    生活的 tricks
    生活的 tricks
    词汇的积累 —— 反义词、同义词
    词汇的积累 —— 反义词、同义词
    目标跟踪系列十一:Exploiting the Circulant Structure of Tracking-by-detection with Kernels代码思路
    Java中Integer类的方法
    php中 重载(二)
    协方差的意义
    malloc函数具体解释
  • 原文地址:https://www.cnblogs.com/athinker/p/9755250.html
Copyright © 2020-2023  润新知