應用程序和數據庫採用Tcp協議通信sql
ORM框架有: NHibernate ,Dapper ,Mybatis 底層是 ADO.Net數據庫
好處:緩存
1.面向對象性能優化
2.沒有sql減小學習成本,快速開發app
3.編譯檢測會更有用(寫sql,字段改了,漏改sql就會異常)框架
3.有編譯檢測(改了數據庫字段,必須修改,不然報錯)?工具
4.支持延遲特性,緩存性能
缺陷:學習
1.sql是自動生成,比較僵化,不肯定是否使用索引優化
2.須要不少反射,對時間和空間有損耗(類,屬性,特性)
3.比較複雜的查詢不合適,用SQL 或 存儲過程, 注意EF查詢的性能優化,和SQL性能優化,
你們不要排斥ORM,由於ORM只是一個工具,雖然不能幫你把全部的事兒都作的盡善盡美,可是它有本身的價值,並且它也能夠直接用ado.net的
一張應用程序,ORM,ADO.Net 和數據庫的圖,還有代碼層面的
舉一個栗子啊 控制檯程序+EF6.幾
namespace Ruanmou.EFDBFirst { class Program { static void Main(string[] args) { try { Console.WriteLine("歡迎來到.Net高級班VIP課程,今晚學習EntityFramework"); //context:數據庫映射,必定有個數據庫鏈接,一開始實例化是沒有任何數據 //查詢個數據以後會作個trace(克隆), 而後你修改任何數據,能識別到而且翻譯成sql執行;;數據不是查詢的,那麼須要去指定狀態 using (advanced11EntitiesDbContext context = new advanced11EntitiesDbContext()) { context.Database.Log += c => Console.WriteLine($"sql:{c}"); User user1 = context.Users.Find(5);//即時查詢 查詢主鍵ID=5的用戶,艾瑪,太神奇了 還有這種操做 。。。 var userList = context.Users.Where(u => u.Id > 0 && u.Name.Length > 2);//延時 foreach (var item in userList) { Console.WriteLine(item.Name); } user1.Name += "test"; user1.State += 1; context.SaveChanges();//把context所有的變化更新到數據庫 User user = context.Users.FirstOrDefault(u => u.Id == 5);//針對數據庫查詢 new List<int>().FirstOrDefault(i => i > 10);//針對內存數據的linq to object User userNew = new User() { Account = "Admin", State = 0, CompanyId = 4, CompanyName = "萬達集團", CreateTime = DateTime.Now, CreatorId = 1, Email = "57265177@qq.com", LastLoginTime = null, LastModifierId = 0, LastModifyTime = DateTime.Now, Mobile = "18664876671", Name = "yoyo", Password = "12356789", UserType = 1 }; context.Users.Add(userNew); context.SaveChanges();//自增主鍵在插入成功後,會自動賦值過去 context.Users.Remove(userNew); context.SaveChanges();//自己就是一個事務 } } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.Read(); } } }
監視執行SQL,貼下圖
之後還能不能愉快的寫SQL了。。。
刪除比修改費時,仍是用軟刪除好了