Entity Framework基礎,entityframework

來源:互聯網
上載者:User

Entity Framework基礎,entityframework
概述

       Entity Framework簡稱EF,是微軟ORM思想具體實現的另一個產品。本篇部落格將簡單的介紹它,至於它的具體深層次的使用,大家可以查詢相應的操作手冊,該篇僅僅是入門。


Entity Framework和Linq to Sql的關係

       大家都知道Linq to Sql是微軟ORM思想的一個具體產品,Entity Framework也是它的一個具體產品,那麼,這兩個產品有什麼區別呢?

       Linq to Sql是ORM思想實現的一個輕量級的架構,Entity Framework是一個重量級架構;

       Linq to Sql和Entity Framework的一個重要的區別就是,Linq to Sql只能針對於SQL Server資料庫,而Entity Framework可以針對於很多的資料庫(Oracle,SQL Server等),也就是說Entity Framework是跨資料庫的,不要小看這一點,在實際的開發中,非常的牛叉,下面我們舉例說明。

       我們使用經典三層構建一個項目,我們需要寫自己的D層,如果此時我們換了資料庫,那麼,我們需要重寫D層。如果我們在建立這個項目的時候,使用了Linq to Sql,那麼我們的D層建立的非常的簡單,但是,當我們換資料庫的時候,Linq to Sql架構就不管用了;如果我們在建立這個項目的時候,使用了Entity Framework架構,那麼,我們只需要改一個設定檔就可以了,不需要修改程式中的代碼。


為什麼使用Linq to Sql或Entity Franework

       回答這個問題,我們就要說一說D層存在的問題了。

       我們寫D層的時候,我們通常會抽象出來一個SQLHelper類,這個類實現了對資料庫的增刪查改,然後,我們再建立相應的D層類,這些D層類裡面的方法的功能,其實都一樣,唯一不同的就是SQL,從這裡我們可以看到,我們的D層的問題,那就是,我們重複性的書寫一些不必要的類或者方法,解決這個方法就需要慢慢的抽象,抽象出共有的東西,像:DataTable裝換為實體集,操作資料庫的幾類方法(注意其參數),然後將其一整合,這個大致就是我們所屬的ORM思想實現的雛形了,當然,上面所說的那些東西,Linq to Sql或Entity Framework這些架構已經協助我們實現了,我們只需要使用它們提供的方法就行了,從這裡我們也可以看到,如果我們使用這些架構,我們程式員在編程的時候,幾乎不需要管理D層的東西,只需要關注業務的實現就可以了。


Entity Framework的執行個體SQL指令碼

CREATE DATABASE DBFirstGOUSE DBFirstGOCREATE TABLE T_Customer(ID INT PRIMARY KEY IDENTITY(1,1),CusName VARCHAR(20) NOT NULL)CREATE TABLE T_Order(ID INT PRIMARY KEY IDENTITY(1,1),CustomerID INT FOREIGN KEY REFERENCES T_Customer(ID),DepName VARCHAR(20) NOT NULL)

程式碼





using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data;namespace EF.EntityFrameworkDemo{    class Program    {        static void Main(string[] args)        {            #region 添加實體            ////建立內容物件            //DBFirstEntities dbFirst = new DBFirstEntities();            ////操作實體                        //T_Customer customer = new T_Customer();            //customer.CusName = "新添使用者";            ////附加在上下文            //dbFirst.T_Customer.AddObject(customer);            ////儲存            //dbFirst.SaveChanges();            #endregion            #region 刪除實體            ////1、建立內容物件            //DBFirstEntities dbFirst = new DBFirstEntities();            ////2、建立實體            //T_Customer customer = new T_Customer();            //customer.ID = 9;            ////3、將實體附加到上下文裡面來進行管理            //dbFirst.T_Customer.Attach(customer);            ////修改實體的狀態            //dbFirst.ObjectStateManager.ChangeObjectState(customer, EntityState.Deleted);            ////4、上下文操作資料庫            //dbFirst.SaveChanges();            #endregion            #region 修改實體            ////1、建立訪問資料庫的內容物件            //DBFirstEntities dbFirst = new DBFirstEntities();            ////2、修改對象            //T_Customer customer = new T_Customer();            //customer.ID = 4;            //customer.CusName = "使用者4_修改後2";            ////3、附加到資料庫            //dbFirst.T_Customer.AddObject(customer);            ////修改對象狀態            //dbFirst.ObjectStateManager.ChangeObjectState(customer, EntityState.Modified);            ////4、上下文更新資料庫            //dbFirst.SaveChanges();            #endregion            #region 查詢            DBFirstEntities dbFirst = new DBFirstEntities();            foreach (var item in dbFirst.T_Customer)            {                Console.WriteLine(string.Format("ID:{0}  Name:{1}",item.ID,item.CusName));            }            #region linq運算式            T_Customer cs = (from customer in dbFirst.T_Customer where customer.ID == 2 select customer).SingleOrDefault();            Console.WriteLine("ID:{0}  Name:{1}",cs.ID,cs.CusName);            #endregion            #endregion            Console.ReadKey();        }    }}

總結

       EF的使用大致可以分為:DBFirst(資料庫為中心)和ModelFirst(實體為中心),上面是DBFirst模型,至於ModelFirst,大家可以搜一下。


Entity Framework於ADONet相比有什優勢?

就目前而言,使用EntityFramework還不如使用NHibernate

Entity Framework的優勢就是擁有更好的LINQ提供者、文檔,並且是由微軟所支援的。

但NHibernate具有大量Entity Framework 4.0所不具備的特性,像批量讀/寫、“額外的”延遲、集合過濾器、調整等等。

ORM工具的普遍開發速度快

但個人基本不用這些ORM工具,對於一個要求高效能、高可靠性、高並發,分布式的web應用程式,自己寫ADO.NET最起碼能保證資料訪問可控。
 
Entity Framework於ADONet相比有什優勢?

就目前而言,使用EntityFramework還不如使用NHibernate

Entity Framework的優勢就是擁有更好的LINQ提供者、文檔,並且是由微軟所支援的。

但NHibernate具有大量Entity Framework 4.0所不具備的特性,像批量讀/寫、“額外的”延遲、集合過濾器、調整等等。

ORM工具的普遍開發速度快

但個人基本不用這些ORM工具,對於一個要求高效能、高可靠性、高並發,分布式的web應用程式,自己寫ADO.NET最起碼能保證資料訪問可控。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.