.Net Core 3.0 MVC 中使用 SqlSugar ORM框架

 介紹

SqlSugar 是一款簡單易用的ORM ,在中國市場佔有率也比較高,

在今年10月份官網改版後  提供了完整的服務,讓您的項目沒有後顧之憂

下載地址 ://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版本選擇 sqlSugarCor

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 下載源碼下載 :

 //github.com/sunkaixuan/SqlSugar