.Net Core 3.0 MVC 中使用 SqlSugar ORM框架
阿新 • • 發佈:2020-10-21
介紹
SqlSugar 是一款簡單易用的ORM ,在國內市場佔有率也比較高,
在今年10月份官網改版後 提供了完整的服務,讓您的專案沒有後顧之憂
下載地址 :https://github.com/sunkaixuan/SqlSugar
1、建立MVC專案
開啟VS2019及以上版本 ,然後新建一個Mvc專案,預設MVC是不支援路由的,需要在Startup.cs裡面加入
app.UseEndpoints(endpoints => { endpoints.MapControllerRoute (name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); endpoints.MapControllerRoute ("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}"); });
然後刪除自帶的Pages
在根目錄建立Controllers資料夾和Views資料夾 ,建立HomerController.cs和 Index.cshtml
2、配置IOC
自帶的IOC使用非常簡單 ,我們這以Auface ioc為例子講解
2.1 安裝Nuget
Autofac
Autofac.Extensions.DependencyInjection
2.2 修改Program
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseServiceProviderFactory(new AutofacServiceProviderFactory())//新增這一行 .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
2.3 修改Startup
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddControllers().AddControllersAsServices();//-----------------新增這一行 } public void ConfigureContainer(ContainerBuilder builder) //----------------新增這個方法 { builder.RegisterType<OrderDal>().InstancePerLifetimeScope(); var webAssemblytype = typeof(Program).Assembly; builder.RegisterAssemblyTypes(webAssemblytype).PropertiesAutowired(); }
3、編寫控制器
public class HomeController : Controller { public OrderDal order { get; set; }//定義他就能注入了 public IActionResult Index() { var list = order.GetList(); return View(); } }
4、編寫 邏輯層程式碼 OrderDal
4、1 建立資料庫倉儲
nuget只需要引用一個dll檔案,
.net 版本選擇 sqlSugar
.net core版本選擇 sqlSugarCore
public class Repository<T> : SimpleClient<T> where T : class, new() { public Repository(ISqlSugarClient context = null) : base(context) { if (context == null) { base.Context = new SqlSugarClient(new ConnectionConfig() { DbType = SqlSugar.DbType.SqlServer, InitKeyType = InitKeyType.Attribute, IsAutoCloseConnection = true, ConnectionString = Config.ConnectionString }); } } /// <summary> /// 擴充套件方法,自帶方法不能滿足的時候可以新增新方法 /// </summary> /// <returns></returns> public List<T> GetDeleteList() { return Context.Queryable<T>().Where(" isdeleted=1 ").ToList(); } }
4.2 使用倉儲
就這樣OrderDal就編寫完成了
public class OrderDal: Repository<Order> { //建立OrderItem public Repository<OrderItem> OrderItem => new Repository<OrderItem>(base.Context); public List<OrderItem> GetOrderItems() { return OrderItem.GetList(); //使用OrderItem } public List<Order> GetOrders() { return base.GetList(); //使用自已的倉儲方法 } }
5、完成程式碼啟動專案
上面簡簡單單幾行就完成了一個IOC+倉儲的 例子
SqlSugar倉儲自帶的方法有很多 ,基本常用開發,不能滿足的在 Repository中新增倉儲方法
var data1 = base.GetById(1); var data2 = base.GetList(); var data3 = base.GetList(it => it.Id == 1); var data4 = base.GetSingle(it => it.Id == 1); var p = new PageModel() { PageIndex = 1, PageSize = 2 }; var data5 = base.GetPageList(it => it.Name == "xx", p); Console.Write(p.PageCount); var data6 = base.GetPageList(it => it.Name == "xx", p, it => it.Name, OrderByType.Asc); Console.Write(p.PageCount); List<IConditionalModel> conModels = new List<IConditionalModel>(); conModels.Add(new ConditionalModel(){FieldName="id",ConditionalType=ConditionalType.Equal,FieldValue="1"});//id=1 var data7 = base.GetPageList(conModels, p, it => it.Name, OrderByType.Asc); base.AsQueryable().Where(x => x.Id == 1).ToList(); //插入 base.Insert(insertObj); base.InsertRange(InsertObjs); var id = base.InsertReturnIdentity(insertObj); base.AsInsertable(insertObj).ExecuteCommand(); //刪除 base.Delete(insertObj); base.DeleteById(1); base.DeleteById(new int[] { 1, 2 }); base.Delete(it => it.Id == 1); base.AsDeleteable().Where(it => it.Id == 1).ExecuteCommand(); //更新 base.Update(insertObj); base.UpdateRange(InsertObjs); base.Update(it => new Order() { Name = "a", }, it => it.Id == 1); base.AsUpdateable(insertObj).UpdateColumns(it=>new { it.Name }).ExecuteCommand();
自帶IOC使何配置
上面使用是Auface 實現的MVC,如果我們要使用自帶的MVC怎麼辦?
1、配置IOC,非常簡單 就幾行程式碼
public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddScoped<OrderDal>();//新增這2行 services.AddDirectoryBrowser();//新增這2行 }
2、使用IOC ,通過建構函式進行注入
public class HomeController : Controller { public OrderDal order { get; set; } public HomeController(OrderDal order) { this.order = order; } public IActionResult Index() { var list = order.GetList(); return View(); } }
SqlSugar ORM 下載原始碼下載 :
https://github.com/sunkaixuan/SqlSugar