轻量ORM-SqlRepoEx (七)AspNetCore应用
分类:
IT文章
•
2022-03-02 21:45:23

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 Server的Northwind数据库,所以选择下载
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
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 }