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

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

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

一、Model

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

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

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