ORM框架EF

應用程序和數據庫採用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了。。。

刪除比修改費時,仍是用軟刪除好了

相關文章
相關標籤/搜索