“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" });