.NET Core 3.0 MVC 中使用 SqlSugar ORM框架
转自:孙凯旋 cnblogs.com/sunkaixuan/p/13853560.html 
介绍
SqlSugar是一款简单易用的ORM ,在国内市场占有率也比较高,
在今年10月份官网改版后  提供了完整的服务,让您的项目没有后顾之忧
下载地址 :https://github.com/sunkaixuan/SqlSugar
一、创建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
二、配置IOC
自带的IOC使用非常简单 ,我们这以Autofac 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();
   });
} 2.3、修改Startup
public void ConfigureServices(IServiceCollection services)
{
  services.AddRazorPages();
  services.AddControllers().AddControllersAsServices();//-----------------添加这一行
}
public void ConfigureContainer(ContainerBuilder builder) //----------------添加这个方法
{
  builder.RegisterType().InstancePerLifetimeScope();
  var webAssemblytype = typeof(Program).Assembly;
  builder.RegisterAssemblyTypes(webAssemblytype)
 .PropertiesAutowired();
} 三、编写控制器
public class HomeController : Controller
{
    public OrderDal order { get; set; }//定义他就能注入了
    public IActionResult Index()
    {
        var list = order.GetList();
        return View();
    }
}四、编写 逻辑层代码 OrderDal
4、1、创建数据库仓储
nuget只需要引用一个dll文件,
.NET版本选择 sqlSugar
.NET Core版本选择 sqlSugarCore
public class Repository : SimpleClient 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
            });
        }
    }
    /// 
    /// 扩展方法,自带方法不能满足的时候可以添加新方法
    /// 
    /// 
    public List GetDeleteList()
    {
        return Context.Queryable().Where(" isdeleted=1 ").ToList();
    }
}    4.2、使用仓储
就这样OrderDal就编写完成了
public class  OrderDal: Repository
{
      //创建OrderItem
      public Repository OrderItem => new Repository(base.Context);
      public List GetOrderItems()
      {
          return OrderItem.GetList(); //使用OrderItem
      }
      public List GetOrders()
      {
          return base.GetList(); //使用自已的仓储方法
      }
}    五、完成代码启动项目
上面简简单单几行就完成了一个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 conModels = new List();
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();//添加这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
- EOF -
评论
