快速傳送
手擼ORM淺談ORM框架之Query篇
後續待定。。。。。。
前人修路後人行
BaseRepository-》GetCurrentTableName已經在《手擼ORM淺談ORM框架之Add篇》BaseRepository裡面的方法,不重複搬磚了。
BaseRepository-》GetKey已經在《手擼ORM淺談ORM框架之Update篇》BaseRepository裡面的方法,不重複搬磚了。
哼,就這???
我們先來看看刪除Sql語句,DELETE FROM TABLE_NAME WHERE 列名稱 = 值 (刪除符合WHERE條件的資料)、DELETE FROM TABLE_NAME 或 DELETE * FROM TABLE_NAME(刪除所有的行,保留表的結構、屬性和索引都是完整的);相對於Insert和UpdateDelete需要的資訊更少,按照我們所需要的Delete Sql依賴反射的原理動態拼接出來Sql語句,我們明白了刪除的Sql語句大刀闊斧開始幹就完了。
BaseRepository-》GetDeleteSql(提高效能可以優化,快取當前專案所有表的增刪查改Sql語句)
1 /// <summary> 2 /// get update sql 3 /// </summary> 4 /// <param name="entity">entity</param> 5 /// <returns>return update sql</returns> 6 private string GetDeleteSql(T entity) 7 { 8 string tableName = GetCurrentTableName(); 9 StringBuilder stringBuilder = new StringBuilder(); 10 stringBuilder.AppendFormat("DELETE FROM {0} WHERE ", tableName); 11 List<PropertyInfo> propertyKeys = GetKey(); 12 foreach (var propertyKey in propertyKeys) 13 { 14 stringBuilder.AppendFormat("{0}=@{0} AND ", propertyKey.Name); 15 } 16 stringBuilder.Remove(stringBuilder.Length - 4, 4); 17 return stringBuilder.ToString(); 18 }
BaseRepository-》泛型Delete;
1 /// <summary> 2 /// delete entity 3 /// </summary> 4 /// <param name="entity">entity</param> 5 /// <returns>return true or false</returns> 6 public bool Delete(T entity) 7 { 8 string sql = GetDeleteSql(entity); 9 MySqlParameter[] parameters = GetMySqlParameters(GetKey().ToArray(), entity); 10 int row = context.Database.ExecuteSqlRaw(sql, parameters); 11 return row > 0 ? true : false; 12 }
實操Repository方法;
1 public bool Delete(Learn_Student learnStudent) 2 { 3 using (MySqlDbContext mySqlDbContext = new MySqlDbContext()) 4 { 5 BaseRepository<Learn_Student> baseRepository = new BaseRepository<Learn_Student>(mySqlDbContext); 6 return baseRepository.Delete(learnStudent); 7 } 8 }
注:learn-orm-net目前只是作為學習ORM框架原理的Demo,專案會做出一定的優化處理,但不能直接拿來在專案中使用,畢竟現在NET Framework、NET Core已經有很多優秀的ORM框架,NET下一次釋出就是隻有一個版本了,我們沒有必要重複造輪子,造輪子是因為沒有現成的優秀的輪子可用。
程式碼下載地址: SourceCode 作者水平有限歡迎園友糾正錯誤及不恰當之處,予以及時修正以免誤導他人!