EntityFramework簡單入個(gè)門

任何一個(gè)和數(shù)據(jù)相關(guān)的系統(tǒng)里,數(shù)據(jù)持久化都是一個(gè)不容忽視的問題。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供金口河網(wǎng)站建設(shè)、金口河做網(wǎng)站、金口河網(wǎng)站設(shè)計(jì)、金口河網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、金口河企業(yè)網(wǎng)站模板建站服務(wù),十余年金口河做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

一直以來,Java 平臺(tái)出了很多 NB 的 ORM 框架,Hibernate、MyBatis等等。.NET 平臺(tái)上,ORM 框架這一塊一直沒有一個(gè)能吊到讓幾乎所有開發(fā)人員改掉以拼寫 SQL 語句訪問數(shù)據(jù)庫的習(xí)慣。

實(shí)際上,在 .NET 平臺(tái)上,也層出不窮的出現(xiàn)了很多類似的玩意兒,比如Nhibernate、Ibatis,還有微軟的親兒子——坑爹的 LinqToSQL。雖然這么多框架,但是真的沒見過 .NET 平臺(tái)的 ORM 框架能像 Java 里那樣普及。

所幸,微軟又搞出來一個(gè)兒子——EntityFramework。前幾個(gè)版本沒用過,前幾天直接了解了6.1.3版本的。。感覺,真 TMD 好用。。

鑒于網(wǎng)上的所有教程都太教條式,入門時(shí)看起來很坑爹,所以將這篇心得做為隨筆,供大家共同學(xué)習(xí)探討。

 

一、安裝框架

首先,要添加環(huán)境。右鍵項(xiàng)目,可以在 NuGet 里直接安裝。如下圖:

EntityFramework 簡單入個(gè)門

安裝完成以后,項(xiàng)目引用里新增了兩個(gè)關(guān)于EntityFramework的引用,如下圖:

EntityFramework 簡單入個(gè)門

   到此,環(huán)境就配置好了。

 

 二、創(chuàng)建Context類和模型類

0,準(zhǔn)備數(shù)據(jù)庫。

寫代碼之前,我們得先有一個(gè)測(cè)試數(shù)據(jù)庫,和一個(gè)測(cè)試表。

這里我使用 SQLServer,表結(jié)構(gòu)如下:EntityFramework 簡單入個(gè)門

 

EF的使用有三種模式:Model First、DataBase First 和 Code First。這幾種First什么區(qū)別,沒仔細(xì)研究。不過我這里使用的好像是 Code First 構(gòu)建的項(xiàng)目。這種方式,我只是覺得方便,好用,感覺項(xiàng)目更干凈,不用添加亂七八糟的代碼和配置。

1,添加模型類。

EF 里的模型類和普通的類一樣,無非是為類或?qū)傩蕴砑右恍傩詷?biāo)記對(duì)表的關(guān)系進(jìn)行一些映射罷了。如下: 

EntityFramework 簡單入個(gè)門

    [Table("Users")]    public class UserInfo
    {
        [Key]
        [StringLength(20)]
        [Column("Code")]        public string Code { get; set; }

        [StringLength(20)]        public string Name { get; set; }
    }

EntityFramework 簡單入個(gè)門

 

   上面代碼中,定義了以下幾個(gè)關(guān)鍵信息:

1,類 UserInfo 對(duì)應(yīng)數(shù)據(jù)庫里的 Users 表。

2,Code 屬性對(duì)應(yīng)數(shù)據(jù)庫里的 Code 字段(如果屬性名和字段名相同,可以忽略這個(gè)配置,比如 Name 屬性)。

3,并且指明兩個(gè)字符型屬性的長度不能超過20個(gè)字符。

4,指示 Code 屬性所對(duì)應(yīng)的列是主鍵列。

(注:Table、Key、StringLength、Column 這幾個(gè)類需要引用命名空間 System.ComponentModel.DataAnnotations 和 using System.ComponentModel.DataAnnotations.Schema )

 

   2,添加 DbContext 類。

   DbContext 類是 EF 的核心,封裝了所有數(shù)據(jù)存取業(yè)務(wù)相關(guān)的邏輯。不管是增刪改查還是事務(wù)什么什么,所有的數(shù)據(jù)庫操作的業(yè)務(wù)都可以在這里搞定。。聽起來很牛逼!

聽起來很牛逼,事實(shí)上更牛逼!

雖然很牛逼,但是用起來超級(jí)簡單。比如像下面的代碼,就實(shí)現(xiàn)了一個(gè)簡單的 DbContext 類:

EntityFramework 簡單入個(gè)門

    public class DALContext : DbContext
    {        public DALContext() : base("name=DALContext")
        {
        }        public virtual DbSet<UserInfo> Users { get; set; }        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

        }
    }

EntityFramework 簡單入個(gè)門

寥寥幾行,完成了復(fù)雜的 DB 操作。

上面代碼簡單說明一下:

1,這個(gè)類名自己起,想叫啥叫啥,我這里叫 DALContext。

2,這個(gè)類必需繼承 DbContext 類。

3,在構(gòu)造方法里,調(diào)用父類的構(gòu)造方法,指明如何連接數(shù)據(jù)庫,這里可以是連接字符串,也可以是配置文件里配置的連接名稱(連接名稱必需前綴 name= )。

4,virtual 聲明的 DbSet<T> 類型的屬性里封裝了一大堆數(shù)據(jù)操作的業(yè)務(wù)邏輯,我們只需要操作該屬性就行了。

5,有幾個(gè)表,就聲明幾個(gè) DbSet<T> 類型的屬性就行了。T 是前面代碼中聲明的 Model ,屬性名自己隨便起。

6,OnModelCreating 方法有什么用?具體的我也不知道。

(這個(gè)類要引用命名空間 System.Data.Entity)

3,配置連接字符串

打開配置文件,添加一個(gè)名為 DALContext 的連接字符串配置。如下圖:

EntityFramework 簡單入個(gè)門

(打開配置文件我們會(huì)發(fā)現(xiàn),里面多了一些關(guān)于 entityFramework 的奇怪的東西。至于是不是必要的,刪了會(huì)不會(huì)死人,我也不知道)

至此,數(shù)據(jù)庫表的映射就Ok了。

 
三、編寫測(cè)試代碼

廢話不說,上代碼:

EntityFramework 簡單入個(gè)門

        static void Main(string[] args)
        {            using (DALContext db = new DALContext())
            {                try
                {
                    db.Users.Add(new UserInfo() {
                        Code = DateTime.Now.Ticks.ToString(),
                        Name = "張三"
                    });

                    IEnumerable<UserInfo> users = db.Users.Where<UserInfo>(u => u.Name == "張三");                    foreach(var u in users)
                    {
                        Console.WriteLine(string.Format("{0} - {1}",u.Code,u.Name));
                    }

                    db.SaveChanges();
                }                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }

            Console.WriteLine("Press any key to exit");
            Console.ReadKey();
        }

EntityFramework 簡單入個(gè)門

 

在 Main 方法里,我們聲明了一個(gè) DALContext 對(duì)象 db,為了便于對(duì)象資源的釋放,這里使用 using  將其包起來。

這段代碼實(shí)現(xiàn)了以下功能:

1,訪問 db 對(duì)象 的 Users 屬性,使用 Add 方法像操作一個(gè)集合一樣向數(shù)據(jù)庫表里增加一條記錄。

2,訪問 db 對(duì)象 的 Users 屬性,使用 Where 方法根據(jù)條件查詢一批數(shù)據(jù)對(duì)象,保存在變量 users 里,并循環(huán)輸出到控制臺(tái)。

3,使用 db 對(duì)象的 SaveChanges 方法,將對(duì)數(shù)據(jù)庫的變更提交。

運(yùn)行以后,結(jié)果如下:

EntityFramework 簡單入個(gè)門

上面例子實(shí)現(xiàn)了增加和查詢功能,刪除和修改功能類似于操作集合,只要保證最后調(diào)用 SaveChanges 方法將修改提交就行。

當(dāng)前標(biāo)題:EntityFramework簡單入個(gè)門
本文來源:http://bm7419.com/article14/pceode.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航網(wǎng)頁設(shè)計(jì)公司域名注冊(cè)、Google、關(guān)鍵詞優(yōu)化、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)