EntityFramework 簡單入個門

  任何一個和數據相關的系統裏,數據持久化都是一個不容忽視的問題。數據庫

  一直以來,Java 平臺出了不少 NB 的 ORM 框架,Hibernate、MyBatis等等。.NET 平臺上,ORM 框架這一塊一直沒有一個能吊到讓幾乎全部開發人員改掉以拼寫 SQL 語句訪問數據庫的習慣。框架

  實際上,在 .NET 平臺上,也層出不窮的出現了不少相似的玩意兒,好比Nhibernate、Ibatis,還有微軟的親兒子——坑爹的 LinqToSQL。雖然這麼多框架,可是真的沒見過 .NET 平臺的 ORM 框架能像 Java 裏那樣普及。ide

  所幸,微軟又搞出來一個兒子——EntityFramework。前幾個版本沒用過,前幾天直接瞭解了6.1.3版本的。。感受,真 TMD 好用。。學習

  鑑於網上的全部教程都太教條式,入門時看起來很坑爹,因此將這篇心得作爲隨筆,供你們共同窗習探討。測試

 

1、安裝框架ui

  首先,要添加環境。右鍵項目,能夠在 NuGet 裏直接安裝。以下圖:spa

  

  安裝完成之後,項目引用裏新增了兩個關於EntityFramework的引用,以下圖:hibernate

   到此,環境就配置好了。code

 

 2、建立Context類和模型類orm

  0,準備數據庫。

  寫代碼以前,咱們得先有一個測試數據庫,和一個測試表。

  這裏我使用 SQLServer,表結構以下:

 

  EF的使用有三種模式:Model First、DataBase First 和 Code First。這幾種First什麼區別,沒仔細研究。不過我這裏使用的好像是 Code First 構建的項目。這種方式,我只是以爲方便,好用,感受項目更乾淨,不用添加亂七八糟的代碼和配置。

  1,添加模型類。

  EF 裏的模型類和普通的類同樣,無非是爲類或屬性添加一些屬性標記對錶的關係進行一些映射罷了。以下: 

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

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

 

   上面代碼中,定義瞭如下幾個關鍵信息:

    1,類 UserInfo 對應數據庫裏的 Users 表。

    2,Code 屬性對應數據庫裏的 Code 字段(若是屬性名和字段名相同,能夠忽略這個配置,好比 Name 屬性)。

    3,而且指明兩個字符型屬性的長度不能超過20個字符。

    4,指示 Code 屬性所對應的列是主鍵列。

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

 

   2,添加 DbContext 類。

   DbContext 類是 EF 的核心,封裝了全部數據存取業務相關的邏輯。不論是增刪改查仍是事務什麼什麼,全部的數據庫操做的業務均可以在這裏搞定。。聽起來很牛逼!

  聽起來很牛逼,事實上更牛逼!

  雖然很牛逼,可是用起來超級簡單。好比像下面的代碼,就實現了一個簡單的 DbContext 類:

    public class DALContext : DbContext
    {
        public DALContext() : base("name=DALContext")
        {
        }

        public virtual DbSet<UserInfo> Users { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {

        }
    }

  寥寥幾行,完成了複雜的 DB 操做。

  上面代碼簡單說明一下:

    1,這個類名本身起,想叫啥叫啥,我這裏叫 DALContext。

    2,這個類必需繼承 DbContext 類。

    3,在構造方法裏,調用父類的構造方法,指明如何鏈接數據庫,這裏能夠是鏈接字符串,也能夠是配置文件裏配置的鏈接名稱(鏈接名稱必需前綴 name= )。

    4,virtual 聲明的 DbSet<T> 類型的屬性裏封裝了一大堆數據操做的業務邏輯,咱們只須要操做該屬性就好了。

    5,有幾個表,就聲明幾個 DbSet<T> 類型的屬性就好了。T 是前面代碼中聲明的 Model ,屬性名本身隨便起。

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

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

  3,配置鏈接字符串

  打開配置文件,添加一個名爲 DALContext 的鏈接字符串配置。以下圖:  

  (打開配置文件咱們會發現,裏面多了一些關於 entityFramework 的奇怪的東西。至因而不是必要的,刪了會不會死人,我也不知道)

  至此,數據庫表的映射就Ok了。

 
3、編寫測試代碼

  廢話不說,上代碼:

        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();
        }

 

  在 Main 方法裏,咱們聲明瞭一個 DALContext 對象 db,爲了便於對象資源的釋放,這裏使用 using  將其包起來。

  這段代碼實現瞭如下功能:

    1,訪問 db 對象 的 Users 屬性,使用 Add 方法像操做一個集合同樣向數據庫表裏增長一條記錄。

    2,訪問 db 對象 的 Users 屬性,使用 Where 方法根據條件查詢一批數據對象,保存在變量 users 裏,並循環輸出到控制檯。

    3,使用 db 對象的 SaveChanges 方法,將對數據庫的變動提交。

  運行之後,結果以下:

  上面例子實現了增長和查詢功能,刪除和修改功能相似於操做集合,只要保證最後調用 SaveChanges 方法將修改提交就行。

相關文章
相關標籤/搜索