sqlsugar


下載地址:https://github.com/sunkaixuan/SqlSugar

SqlSugar是.NET版本,SqlSugarCore是.NET CORE版本,根據你的項目選擇你的引用dll

優點:

  很多人都會問您這款ORM有哪些特點,有什么競爭力,我歸納出以上幾點供你參考

  • 高性能 ,不誇張的說,去掉Sql在數據庫執行的時間,SqlSugar是EF數倍性能,另外在批量操作和一對多查詢上也有不錯的SQL優化
  • 高擴展性 ,支持自定義拉姆達函數解析、擴展數據類型、支持自定義實體特性,外部緩存等
  • 穩定性和技術支持,  雖然不是官方ORM, 但在穩定性上也是有着數年用戶積累,如果遇到問題可以在GITHUB提出來,會根據緊急度定期解決
  • 功能全面,雖然SqlSugar小巧可功能並不遜色於EF框架
  • 創新、持續更新 ,向下兼容
SqlSugarClient db = new SqlSugarClient( new ConnectionConfig() { ConnectionString = "server=.;uid=sa;pwd=@jhl85661501;database=SqlSugar4XTest", DbType = DbType.SqlServer,//設置數據庫類型
        IsAutoCloseConnection = true,//自動釋放數據務,如果存在事務,在事務結束后釋放
        InitKeyType = InitKeyType.Attribute //從實體特性中讀取主鍵自增列信息
 }); //用來打印Sql方便你調式 
db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql + "\r\n" + db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); Console.WriteLine(); }; /*查詢*/

var list = db.Queryable<StudentModel>().ToList();//查詢所有

var getById = db.Queryable<StudentModel>().InSingle(1);//根據主鍵查詢

var getByWhere = db.Queryable<StudentModel>().Where(it=>it.Id==1).ToList();//根據條件查詢

var total = 0; var getPage = db.Queryable<StudentModel>().Where(it => it.Id == 1).ToPageList(1,2,ref total);//根據分頁查詢

/*插入*/
var data = new Student() { Name = "jack" }; db.Insertable(data).ExecuteCommand();
 
/*更新*/
var data2 = new Student() { Id =1, Name = "jack" }; db.Updateable(data2).ExecuteCommand();
 
/*刪除*/ db.Deleteable<StudentModel>(1).ExecuteCommand();

 實體類

//如果實體類名稱和表名不一致可以加上SugarTable特性指定表名
[SugarTable("Student")] public class StudentModel { //指定主鍵和自增列,當然數據庫中也要設置主鍵和自增列才會有效
    [SugarColumn(IsPrimaryKey=true,IsIdentity =true)] public int Id { get; set; } public string Name { get; set; } } //當然也支持自定義特性, 這里就不細講了

根據實體創建表

db.CodeFirst.SetStringDefaultLength(200/*設置varchar默認長度為200*/).InitTables(typeof(StudentModel));//執行完數據庫就有這個表了

使用SimpleClient優化你的代碼

我們之前學會了用 SqlSugarClient對象來操作數據庫了,但是對於一些喜歡泛型的人來說,還不夠精簡,我們就來學習一下SimpleClient

使用DbContext完成增刪查改,注意使用 DemoMangar需要new出來使用,保證他的上級或者上上級不能單例或者靜態

public class DbContext { public DbContext() { Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "server=.;uid=sa;pwd=@jhl85661501;database=SqlSugar4XTest", DbType = DbType.SqlServer, InitKeyType = InitKeyType.Attribute,//從特性讀取主鍵和自增列信息
            IsAutoCloseConnection = true,//開啟自動釋放模式和EF原理一樣我就不多解釋了
 }); //調式代碼 用來打印SQL 
        Db.Aop.OnLogExecuting = (sql, pars) => { Console.WriteLine(sql + "\r\n" + Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value))); Console.WriteLine(); }; } //注意:不能寫成靜態的,不能寫成靜態的
    public SqlSugarClient Db;//用來處理事務多表查詢和復雜的操作
    public SimpleClient<Student> StudentDb { get { return new SimpleClient<Student>(Db); } }//用來處理Student表的常用操作
    public SimpleClient<School> SchoolDb { get { return new SimpleClient<School>(Db); } }//用來處理School表的常用操作
}
public class DemoManager : DbContext//繼承DbContext
{ //SimpleClient實現查詢例子
    public void SearchDemo() { var data1 = StudentDb.GetById(1);//根據ID查詢
        var data2 = StudentDb.GetList();//查詢所有
        var data3 = StudentDb.GetList(it => it.Id == 1);  //根據條件查詢 
        var data4 = StudentDb.GetSingle(it => it.Id == 1);//根據條件查詢一條
 
        var p = new PageModel() { PageIndex = 1, PageSize = 2 };// 分頁查詢
        var data5 = StudentDb.GetPageList(it => it.Name == "xx", p); Console.Write(p.PageCount);//返回總數 // 分頁查詢加排序
        var data6 = StudentDb.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 = StudentDb.GetPageList(conModels, p, it => it.Name, OrderByType.Asc); //4.9.7.5支持了轉換成queryable,我們可以用queryable實現復雜功能
         StudentDb.AsQueryable().Where(x => x.Id == 1).ToList(); } //插入例子
    public void InsertDemo() { var student = new Student() { Name = "jack" }; var studentArray = new Student[] { student }; StudentDb.Insert(student);//插入
 StudentDb.InsertRange(studentArray);//批量插入
 
        var id = StudentDb.InsertReturnIdentity(student);//插入返回自增列 //4.9.7.5我們可以轉成 Insertable實現復雜插入
 StudentDb.AsInsertable(insertObj).ExecuteCommand(); } //更新例子
    public void UpdateDemo() { var student = new Student() { Id = 1, Name = "jack" }; var studentArray = new Student[] { student }; StudentDb.Update(student);//根據實體更新
 StudentDb.UpdateRange(studentArray);//批量更新
 StudentDb.Update(it => new Student() { Name = "a", CreateTime = DateTime.Now }, it => it.Id == 1);// 只更新Name列和CreateTime列,其它列不更新,條件id=1 //支持StudentDb.AsUpdateable(student)
 } //刪除例子
    public void DeleteDemo() { var student = new Student() { Id = 1, Name = "jack" }; StudentDb.Delete(student);//根據實體刪除
        StudentDb.DeleteById(1);//根據主鍵刪除
        StudentDb.DeleteById(new int[] { 1,2});//根據主鍵數組刪除
        StudentDb.Delete(it=>it.Id==1);//根據條件刪除 //支持StudentDb.AsDeleteable()
 } //使用事務的例子
    public void TranDemo() { var result = Db.Ado.UseTran(() => { //這里寫你的邏輯
 }); if (result.IsSuccess) { //成功
 } else { Console.WriteLine(result.ErrorMessage); } } }
//多表查詢
public void JoinDemo() { var list= Db.Queryable<Student, School>((st, sc) => new object[] { JoinType.Left, st.SchoolId==sc.Id }).Select<ViewModelStudent>().ToList(); }

 讓我們不用每次寫增刪改查

public class DbContext<T> where T: class,new()
{
    public DbContext()
    {
        Db = new SqlSugarClient(new ConnectionConfig()
        {
            ConnectionString = "server=.;uid=sa;pwd=@jhl85661501;database=SqlSugar4XTest",
            DbType = DbType.SqlServer,
            InitKeyType = InitKeyType.Attribute,//從特性讀取主鍵和自增列信息
            IsAutoCloseConnection = true,//開啟自動釋放模式和EF原理一樣我就不多解釋了
 
        });
        //調式代碼 用來打印SQL 
        Db.Aop.OnLogExecuting = (sql, pars) =>
        {
            Console.WriteLine(sql + "\r\n" +
                Db.Utilities.SerializeObject(pars.ToDictionary(it => it.ParameterName, it => it.Value)));
            Console.WriteLine();
        };
 
    }
    //注意:不能寫成靜態的
    public SqlSugarClient Db;//用來處理事務多表查詢和復雜的操作

    public SimpleClient<T> CurrentDb { get { return new SimpleClient<T>(Db); } }//用來處理T表的常用操作
 
    /// <summary>
    /// 獲取所有
    /// </summary>
    /// <returns></returns>
    public virtual List<T> GetList()
    {
        return CurrentDb.GetList();
    }
 
    /// <summary>
    /// 根據主鍵刪除
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual bool Delete(dynamic id)
    {
        return CurrentDb.Delete(id);
    }

    /// <summary>
    /// 更新
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    public virtual bool Update(T obj)
    {
        return CurrentDb.Update(obj);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM