.Net 數據訪問層之ORM框架EF簡介


應用程序和數據庫采用Tcp協議通訊

ORM框架有: NHibernate ,Dapper ,Mybatis 底層是 ADO.Net

好處:

1.面向對象

2.沒有sql減少學習成本,快速開發

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了。。。

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


免責聲明!

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



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