SqlSugar实现数据的访问

“sqlsugar”组件实现数据访问

SqlSugar 是一款小巧,并且功能齐全的ORM,并不需要像Dapper一样依赖第三方扩展,语法易用简单 ,有漂亮的拉姆达语法,也支持Dapper SQL和ADO.NET(存储过程等)的所有功能,它的性能达到原生水准,远超 Dapper和EF CORE,而且支持.NET CORE , 多个数据库

    1. 连接数据库   
    1)添加一个数据表的类定义其属性
       class Customer
    {
        public string customerNo
        {
            get;
            set;
        }
        public string customerName
       {
           get;
           set;
       }
        public string zip
        {
            get;
            set;
        }
        public string address
        {
            get;
            set;
        }
        public string telephone
        {
            get;
            set;
        }
    }

2)再添加一个连接数据库的类

  public class SugarDao
    {
       public static string ConnectionString
       {
           get
           {
               string reval = "Data Source=.;Integrated Security=SSPI;Initial Catalog=OrderDB";
               return reval;
           }
       }
       public static SqlSugarClient GetInstance()
       {
           var db = new SqlSugarClient(ConnectionString);
           return db;
       }
    }

3)主函数部分

var db = SugarDao.GetInstance();
    2. 查询

1)查询单条

 var single = db.Queryable<Customer>().Single(c => c.customerNo == "C20050002");
 Console.WriteLine("{0}  {1}  {2}  {3}  {4}", single.customerNo, single.customerName, single.address, single.telephone, single.zip);

2)查询单条根据主键

var singleByPk = db.Queryable<Customer().InSingle("C20050001");
 Console.WriteLine("{0}  {1}  {2}  {3}  {4}", singleByPk.customerNo, singleByPk.customerName, singleByPk.address, singleByPk.telephone, singleByPk.zip);

3)查询所有的customerNo

var singleFieldList = db.Queryable<Customer>().Select<string>(it => it.customerNo).ToList();
   foreach (var item in singleFieldList)
        {
           Console.WriteLine(item);
        }

4)查询多条

 List<Customer> cusList = db.Queryable<Customer>().ToList();
            foreach (Customer i in cusList)
            {
                Console.WriteLine("{0}  {1}  {2}  {3}  {4}", i.customerNo, i.customerName, i.address, i.telephone, i.zip);
            }

5)模糊查询

 Console.WriteLine("查询客户名称中包含'市'的");
            var c1 = db.Queryable<Customer>().Where(c => c.customerName.Contains("市")).ToList();
            foreach (Customer i in c1)
            {
                Console.WriteLine("{0}  {1}  {2}  {3}  {4}", i.customerNo, i.customerName, i.address, i.telephone, i.zip);
            }
            Console.WriteLine("查询客户名称是'南'字开头的");
            var c2 = db.Queryable<Customer>().Where(c => c.customerName.StartsWith("南")).ToList();
            foreach (Customer i in c2)
            {
                Console.WriteLine("{0}  {1}  {2}  {3}  {4}", i.customerNo, i.customerName, i.address, i.telephone, i.zip);
            }
             Console.WriteLine("查询客户名称是'城'字结尾的");
            var c3 = db.Queryable<Customer>().Where(c => c.customerName.EndsWith("城")).ToList();
            foreach (Customer i in c3)
            {
                Console.WriteLine("{0}  {1}  {2}  {3}  {4}", i.customerNo, i.customerName, i.address, i.telephone, i.zip);
            }
   3. 插入

1)属性zip这一列将不会插入值

 db.DisableInsertColumns = new string[] { "zip" };

2)添加禁止插入列

 db.AddDisableInsertColumns("telephone", "address");//如果插入的列本身为not null,那么数据将无法插入到数据库
Customer cus = new Customer()
            {
                customerNo = "C20080002",
                customerName = "南昌市电脑研制中心",
                telephone = "215455452",
                address = "南昌市",
                zip = "000222"
            };


  Customer cus1 = new Customer()
            {
                customerNo = "C20080003",
                customerName = "南昌市电脑研制中心",
                telephone = "215455333",
                address = "南昌市",
                zip = "222555"
            };

3)插入单条

 var id = db.Insert(cus); 

4)插入多条

   List<Customer> clist = new List<Customer>();
            clist.Add(cus);
            clist.Add(cus1);

5) 批量插入

var id1 = db.InsertRange(clist);

6) 批量插入 适合海量数据插入

 var id2 = db.SqlBulkCopy(clist);

7)清空禁止插入列

db.DisableInsertColumns = null;
 4. 更新

1)只更新属性zip这一列 条件 customerNo == “C20050001”

  db.Update<Customer>(new { zip = "111000" }, it => it.customerNo == "C20050001");

2) 更新属性zip和属性telephone两列

 db.Update<Customer, string>(new { zip = "112311", telephone = "012-45781411" }, "C20050001", "C20050002");//根据主键,可以有多个参数,结果修改后的多个人的zip,telephone都相同

3)使用字典更新

 var dic = new Dictionary<string, string>();
            dic.Add("zip", "112333");
            dic.Add("telephone", "012-45781433");
            db.Update<Customer, string>(dic, "C20050001");

4)整个实体更新
方法一:

  db.Update(new Customer { customerNo = "C20050001", customerName = "蓝翔16", zip = "112311", address = "北京市", telephone = "012-45781411" });

方法二

  db.Update<Customer>(new Customer { customerName = "蓝翔14", zip = "112333", address = "上海市", telephone = "012-45781422" }, it => it.customerNo == "C20050001");

注意:

     db.Update<Customer>(new Customer() { customerNo = "C20050001", customerName = "蓝翔16" });//这里只更新某几列是可以实现的,未添加值的列将为null,所以若属性设置为了not null会更新失败

5)设置不更新列

      db.DisableUpdateColumns = new string[] { "telephone" };//设置telephone不更新
     Customer cus = new Customer()
            {
                customerNo = "C20050001",
                customerName = "南昌市电脑研制中心",
                address = "南昌市",
                zip = "000222"
            };
            Customer cus1 = new Customer()
            {
                customerNo = "C20050002",
                customerName = "南昌市电脑研制中心",
                address = "上海市",
                zip = "222000"
            };

6)更新单条

      var id = db.Update(cus); 

7)更新多条

      List<Customer> clist = new List<Customer>();
            clist.Add(cus);
            clist.Add(cus1);

8) 批量更新
方法一:

     var id1 = db.UpdateRange(clist);

方法二:

    var id2 = db.SqlBulkReplace(clist);// 适合海量数据更新

9)清空禁止更新列

    db.DisableUpdateColumns = null;
5. 删除

1)根据主键

    db.Delete<Customer, string>("C20080002");

2)主键批量删除

       db.Delete<Customer, string>(new string[] {"C20080002", "C20080003" });

3)非主键批量删除

    db.Delete<Customer, string>(it => it.address, new string[] { "000222", "222000" });

4)根据字符串删除

     db.Delete<Customer>(it => it.customerNo == "C20080002");

5)根据表达式

     db.Delete<Customer>("customerNo=@customerNo", new { customerNo = "C20080002" });

6)根据实体

        db.Delete(new Customer() { customerNo = "C20080003" });

猜你喜欢

转载自blog.csdn.net/qq_41571267/article/details/79348671
今日推荐