【EF 1】EF實體框架 原理+實例

1、知識回顧

到目前爲止,本身學到的連接數據庫操做已經經歷了幾個階段,分別是:學生信息管理和(第一次)機房收費時的直接鏈接數據庫操做表格,而後是機房我的重構中應用的操做實體,在其中還利用了一個很重要的幫助類:SQLHelper。程序員

在這個轉變中,已經逐步由面向過程轉向面向對象,但在分層操做實體的過程當中,因爲數據庫的設計不很完美,有時候須要修改數據庫設計,或者須要更改實體。每次遇到這樣的事兒,就腦殼疼,由於數據庫和實體必需要對應起來,否則問題就越改越大了。
那麼怎樣解決這一問題呢?最近學習了一個EF實體框架知識,解決了這一問題。

首先,回顧一下這以前的數據庫連接操做。也就是運用ADO.NET進行操做,主要經歷5個步驟:創建鏈接—打開—建立命令—執行—關閉。如:sql

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;"> private void button1_Click(object sender, EventArgs e)
        {
            string conStr = @"server=.;uid=sa;pwd=123456;database=shoppingBus";//鏈接字符串
            SqlConnection sqlconnection = new SqlConnection(conStr);//創建鏈接
            sqlconnection.Open();//打開連接
            string str = "select * from petType";
            DataTable dt = new DataTable();
            SqlDataAdapter sqldataadapter = new SqlDataAdapter(str,sqlconnection);//執行命令,讀取數據
            sqldataadapter.Fill(dt);//填充表格
            this.dataGridView1.DataSource = dt;
            sqlconnection.Close();//關閉連接
        }</span></span>



2、EF實體框架

2.1,什麼是?

實體框架(Entity Framework)是微軟以ADO.Net爲基礎開發出來的對象關係映射(ORM)解決方案,它解決了對象持久化問題,將程序員從編寫麻煩的SQL語句當中解放出來。 相對於傳統的ADO等各類數據庫操縱技術來講,微軟的ADO.Net更爲先進,它封裝了不少底層操做,抽象了接口,針對接口編程,將調用統一化。
數據庫

2.2,好處(我的理解)

我認爲實體框架的好處是,當咱們須要修改數據庫或者實體時,可以經過實體模型的及時更新解決實體對應映射問題,而不用像以前同樣一個一個的對照着修改。並且,它的跨數據庫應用實踐更爲方便,只須要更改配置文件中的數據便可,能夠直接將模型生成應用程序數據庫到對應數據庫服務中。編程

2.3,應用

2.3.1,準備工做

首先,實在VS中創建新項,添加新建項—數據—ADO.NET實體數據模型,而後設置其本身想要的映射的數據集,設置成功後,會生成一些列文件:設計模式


如上圖所示,這就是我測試用的shoppingBus數據庫生成的實體映射。其中有3個重要的類,分別是:框架

dataModel.Context.tt下的dataModel.Context.cs類,這個類是包含的數據庫的上下文關係,我當時在看的時候就想到了設計模式策略模式中的context類,我認爲它們有着共同之處,都是負責數據間的交互和實現。數據庫設計

DataModel.tt下的數據表類,好比這裏的就是pet.cs類和petType.cs類。這裏就是至關於具體的實體類,值得特別說明的是,EF生成的實體映射同時包括表關係,主外鍵的關係等。ide

2.3.2,實踐

<span style="font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">  static void Main(string[] args)
        {
            //第一步:建立EF訪問數據庫的統一入門,上下文:DbContext
            shoppingBusEntities1 dbcontext = new shoppingBusEntities1();

            #region 增、刪、改
            //第二步:插入一條數據,添加一個寵物類型
            pet pet = new pet();
            pet.petID = "003";
            pet.petName = "人";
            pet.petPrice = 19;

            //第三步:修改數據,設置狀態
            dbcontext.Entry<pet>(pet).State = EntityState.Modified;//增、刪、改,直接修改實體的狀態便可
            #endregion

           #region 查詢

            var temps = from p in dbcontext.pet
                        where p.petID == "001"
                        select p;//查詢所有列
                        //select p.petName;//查詢部分列 
            foreach (var myPet in temps)
            {
                Console.WriteLine(myPet.petID + "  " + myPet.petName +" "+myPet.petPrice);
            }

            #endregion

            //第四步:命令把全部的變化都更新到數據庫裏面去
            dbcontext.SaveChanges();
        }</span></span>


說明:向原來用的SQL連接數據庫操做數據同樣,EF實體也有本身的邏輯步驟,則是:創建訪問入口(上下文)—整理本身的數據—告訴上下文須要執行的操做—保存本身的操做。能夠看到,尤爲是在增、刪、改的過程當中,沒有看見任何的SQL語句,但實際上是由編譯器先幫咱們翻譯成了SQL的腳本。因此,使用EF操做數據庫和使用以前的方法操做數據庫,主要的區別則是在轉換腳本這一過程當中的不一樣,EF須要轉換,而以前的方法不須要。學習


3、總結

根據本身目前的理解,我以爲EF實體映射其實已經脫離了對數據庫的一個操做。咱們操做的應該是實體,而後經過實體映射給數據庫。因此是進一步和數據庫解耦和了,達到了一個真正的面向對象。測試

而使用EF實體還有好處就是,能夠動態的更新實體和數據庫的映射關係,從而就不用向原來同樣費神費力的去兩邊對照修改。能夠由數據庫端更新,而後直接更新實體映射,也能夠是更改實體映射,而後更新數據庫。因爲EF實體操做並不直接操做數據庫,因此它在跨數據庫操做方面(更改配置文件中的provider的提供方式),也有着本身的優點。

相關文章
相關標籤/搜索