對于SQL Server、MySql、Oracle等這些傳統(tǒng)的數(shù)據(jù)庫,基本都是關(guān)系型數(shù)據(jù)庫,都是體現(xiàn)實體與實體之間的聯(lián)系,在以前開發(fā)時,可能先根據(jù)需求設計數(shù)據(jù)庫,然后在寫Model和業(yè)務邏輯,對于Model類基本都是和表的字段對應著,而表中存的每條記錄又和類的實例對象對應著,有了這個對照關(guān)系,就是能不能只在一邊設計,在數(shù)據(jù)庫設計表或在VS中設計Model,然后直接生成另一邊,這樣就省了好多時間成本。于是有了ORM,Object Relation Mapping,對象關(guān)系映射。既然可以根據(jù)Model可以生成數(shù)據(jù)庫,數(shù)據(jù)庫也可以生成Model,Model、數(shù)據(jù)庫又是分離的,我們也可以根據(jù)Model生成不同類型(Sql Server\Oracle)數(shù)據(jù)庫,而不同類型的數(shù)據(jù)庫(Sql Server\Oracle)也可以生成同樣的Model,而它們共同的紐帶就是Mapping。

EF實體框架有3種類型,Data First、Model First、Code First。從今天起,將來的幾篇博客可能都是關(guān)于Code First的,可能有人會問,其他的呢?對于另外兩個我不打算花太多的時間,現(xiàn)在code first用的比較多,而且和其他兩個比來說更加方便簡單,code first沒有包含CSDL(Conceptual Schema Definition Language 概念架構(gòu)定義語言)、SSDL(Store Schema Definition Language存儲架構(gòu)定義語言)、MSL(Mapping Specification Language 映射規(guī)范語言)的映射定義,可是使用基于約定的映射。例如主鍵,只需要用Id命名屬性或以Id結(jié)尾,這種會自動映射到主鍵上。對于上面的CSDL、SSDL、MSL根據(jù)中文應該也能猜出一二來,其實CSDL概念架構(gòu)定義語言,定義概念的嘛,當然是定義.Net類的,而SSDL存儲架構(gòu)定義,既然是存儲,肯定是數(shù)據(jù)庫啊,所以它是描述表及其關(guān)系的結(jié)構(gòu)。而MSL映射規(guī)范語言,當然是用來映射的,比如類中的Name屬性可能在數(shù)據(jù)庫定義的列名不是name,那怎么辦呢?這時有了MSL就好辦了,它就是用來描述映射關(guān)系的。

上面瞎逼逼半天,實際上今天是想大致演示下code first的用法,做簡單的增刪改查。

一、Model

首先是創(chuàng)建了一個控制臺應用程序EFCodeFirstDemo,又創(chuàng)建了一個存放Model的類庫EFCodeFirstDemo,以及一個與數(shù)據(jù)庫有關(guān)系的類庫EFCodeFirstDataAccess,算是三層架構(gòu)中的DAL,至于BLL先不創(chuàng)建,只是簡單的演示。既然是code first,管理對象,那肯定要先有一個Model類,這里在EFCodeFirstDemo中定義了一個Student類。在Student類中使用約定定義StuId為主鍵,由于默認會把Id結(jié)尾的屬性作為主鍵,所以不用特性也可以。

大學生就業(yè)培訓,高中生培訓,在職人員轉(zhuǎn)行培訓,企業(yè)團訓

using System;using System.Collections.Generic;using System.ComponentModel.DataAnnotations;using System.Linq;using System.Text;using System.Threading.Tasks;namespace EFCodeFirstModels
{    public class Student
    {
        [Key]        public string StuId { get; set; }        public string Name { get; set; }      &nb
        
		

網(wǎng)友評論