国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

實(shí)體框架技術(shù)及其在網(wǎng)絡(luò)課程開發(fā)中的應(yīng)用

2018-01-06 00:54:49劉文勝劉博夫朱寧
電腦知識(shí)與技術(shù) 2017年35期
關(guān)鍵詞:網(wǎng)絡(luò)課程

劉文勝+劉博夫+朱寧

摘要:介紹了實(shí)體框架技術(shù)的基本原理與優(yōu)勢(shì),通過實(shí)體框架技術(shù)訪問數(shù)據(jù)庫(kù)可有效提高開發(fā)效率,增強(qiáng)代碼的可讀性。以網(wǎng)絡(luò)課程中主要交互模塊的實(shí)現(xiàn)為例給出了實(shí)體框架技術(shù)的應(yīng)用實(shí)例。

關(guān)鍵詞:實(shí)體框架;網(wǎng)絡(luò)課程;ASP.NET

中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2017)35-0095-03

Entity Framework Technology and its Application in Development of Network Course

LIU Wen-sheng1, LIU Bo-fu2 ,ZHU Ning1

(1.College of Educational Science, Hunan Normal University, Changsha 410081, China;2.Central South University, Changsha 410083, China)

Abstract: This paper introduces the principle and advantage of entity Framework technologies, The entity Framework technologies can improve the efficiency and enhance the readability of the code during database operating. Based on the examples of main interaction modules programming in network course this paper gives the examples of entity framework technologies application.

Key words: entity framework; network course;ASP.NET

1 概述

在現(xiàn)代遠(yuǎn)程教育中,教學(xué)活動(dòng)圍繞網(wǎng)絡(luò)課程展開,網(wǎng)絡(luò)課程是實(shí)施現(xiàn)代遠(yuǎn)程教育目標(biāo)的基本單元和核心內(nèi)容,所以,網(wǎng)絡(luò)課程的發(fā)展?fàn)顩r對(duì)網(wǎng)絡(luò)教學(xué)的最終效果有著重要影響。為促進(jìn)基于Internet的遠(yuǎn)程教育的發(fā)展,實(shí)現(xiàn)教育資源的及時(shí)共享,作為網(wǎng)絡(luò)教育資源建設(shè)中的重要組成部分,網(wǎng)絡(luò)課程的設(shè)計(jì)與開發(fā)已成為現(xiàn)代教育技術(shù)工作的重要內(nèi)容。而網(wǎng)絡(luò)課程的開發(fā)離不開網(wǎng)絡(luò)技術(shù)的支持,現(xiàn)有的網(wǎng)絡(luò)課程的編程技術(shù),都在不同程度上存在著代碼重復(fù)率高、復(fù)用程度低、源代碼安全性差等缺陷。為適應(yīng)信息技術(shù)的發(fā)展,加快網(wǎng)絡(luò)課程建設(shè)的步伐,將新的動(dòng)態(tài)網(wǎng)站開發(fā)技術(shù)運(yùn)用到網(wǎng)絡(luò)課程的建設(shè)工程中成了發(fā)展網(wǎng)絡(luò)教育的一個(gè)重要的課題。

ASP.NET是動(dòng)態(tài)網(wǎng)站開發(fā)技術(shù)之一,為易用性為網(wǎng)絡(luò)課程的開發(fā)提供了強(qiáng)有力的支持。在以往的ASP.NET開發(fā)中,開發(fā)人員所使用的是ADO.NET數(shù)據(jù)訪問技術(shù),主要通過Command對(duì)象和DataSet對(duì)象等實(shí)現(xiàn)數(shù)據(jù)的增、刪、查、改等操作,如果數(shù)據(jù)結(jié)構(gòu)或者存儲(chǔ)過程發(fā)生改變,很有可能會(huì)破壞整個(gè)應(yīng)用程序。而實(shí)體框架(Entity Framework)則不然,它是以ADO.NET為基礎(chǔ)開發(fā)出的對(duì)象關(guān)系映射(Object Relational Mapping,簡(jiǎn)稱ORM)解決方案,它的作用是在關(guān)系型數(shù)據(jù)庫(kù)與業(yè)務(wù)實(shí)體對(duì)象之間做一個(gè)映射,這樣一來(lái),在具體操作業(yè)務(wù)對(duì)象的時(shí)候只需操作對(duì)象的屬性和方法,無(wú)需編寫復(fù)雜的SQL語(yǔ)句。ADO.NET實(shí)體框架的出現(xiàn)使程序員以完全面向?qū)ο蟮乃枷腴_發(fā)應(yīng)用程序,不但使程序員的工作量大大減少,也為應(yīng)用程序日后的維護(hù)工作帶來(lái)了便利。近幾年來(lái),實(shí)體框架技術(shù)因其開發(fā)周期短、可維護(hù)性高等優(yōu)點(diǎn)在動(dòng)態(tài)網(wǎng)站開發(fā)中的地位日益上升,逐漸成為數(shù)據(jù)存取的主角。

2 實(shí)體框架概述

實(shí)體框架是一個(gè)對(duì)象關(guān)系映射工具,可以把開發(fā)人員在編程時(shí)使用的對(duì)象映射到底層的數(shù)據(jù)庫(kù)結(jié)構(gòu),自動(dòng)從數(shù)據(jù)庫(kù)生成數(shù)據(jù)訪問層,能夠使程序員免于編寫冗長(zhǎng)的數(shù)據(jù)訪問類,是一套能夠支持開發(fā)面向數(shù)據(jù)的應(yīng)用程序的技術(shù)。因?yàn)閷?shí)體框架是.NET Framework的一個(gè)組件,所以只要是安裝了.NET Framework 3.5 SP1以上版本的計(jì)算機(jī)均可運(yùn)行此框架。

2.1 實(shí)體框架工作原理

實(shí)體框架是根據(jù)實(shí)體對(duì)象操作數(shù)據(jù)表中數(shù)據(jù)的一種面向?qū)ο蟮牟僮骺蚣?。它將?shù)據(jù)庫(kù)中的表映射成對(duì)應(yīng)的類,數(shù)據(jù)表中的各個(gè)字段映射為對(duì)應(yīng)類的屬性(property),表間關(guān)系映射為結(jié)合屬性(association),從而將數(shù)據(jù)庫(kù)的E-R模型轉(zhuǎn)化為編程語(yǔ)言的對(duì)象模型。從而使開發(fā)人員可以通過操作類來(lái)操作數(shù)據(jù)庫(kù),而不需要考慮底層數(shù)據(jù)庫(kù)中的數(shù)據(jù)表和字段。ADO.NET實(shí)體框架支持三種數(shù)據(jù)創(chuàng)建模式,即: 代碼優(yōu)先(Code First)模式、模型優(yōu)先(Model First)模式、數(shù)據(jù)庫(kù)優(yōu)先(Database First)模式。

ADO.NET實(shí)體框架的核心是實(shí)體數(shù)據(jù)模型(Entity Data Model,簡(jiǎn)稱EDM),由概念模型(Conception Model)、存儲(chǔ)模型(Storage Model)、概念-存儲(chǔ)模型映射(Conceptual-Storage Mapping)三部分組成。概念模型主要體現(xiàn)為一組能夠被應(yīng)用程序直接使用的被稱為“實(shí)體(entity)”的類。存儲(chǔ)模型主要體現(xiàn)為一組與底層數(shù)據(jù)存儲(chǔ)介質(zhì)直接對(duì)應(yīng)的類。概念-存儲(chǔ)模型映射主要用來(lái)解決“概念模型”中的類如何與“存儲(chǔ)模型”中的類相互對(duì)應(yīng)的問題。實(shí)體框架使用這三種基于XML的語(yǔ)言表示的模型和映射文件把對(duì)象模型中的實(shí)體和關(guān)系的創(chuàng)建、讀取、刪除和更新等操作轉(zhuǎn)換為數(shù)據(jù)源中的等效操作。

2.2 ADO.NET實(shí)體框架的優(yōu)勢(shì)

實(shí)體框架是微軟推出的以ADO.NET為基礎(chǔ)的數(shù)據(jù)建模和對(duì)象持久化的最新框架。目的是減少面向數(shù)據(jù)的應(yīng)用程序所需編寫的代碼量,減少開發(fā)時(shí)間,減輕日后的網(wǎng)站維護(hù)工作。

采用ADO.NET實(shí)體框架開發(fā)應(yīng)用程序擁有如下優(yōu)勢(shì):

1) 開發(fā)過程中可以通過概念模型直接對(duì)數(shù)據(jù)庫(kù)進(jìn)行相關(guān)的操作,而不再對(duì)特定的數(shù)據(jù)引擎或者存儲(chǔ)架構(gòu)具有硬編碼依賴性;

2) 從Oracle和SQL Server等數(shù)據(jù)庫(kù)映射成的C#代碼具有相似性,開發(fā)中可以把注意力放到概念模型上,無(wú)需關(guān)心底層數(shù)據(jù)庫(kù)的細(xì)節(jié);

3) 概念模型和映射關(guān)系的改變對(duì)數(shù)據(jù)訪問層的影響不大;

4) 多個(gè)概念模型可映射到同一個(gè)存儲(chǔ)架構(gòu);

5) LINQ(即語(yǔ)言集成查詢)支持針對(duì)概念性模型的編譯時(shí)語(yǔ)法驗(yàn)證。

3 實(shí)體框架開發(fā)環(huán)境架設(shè)

3.1 Visual Studio 2015中實(shí)體框架的安裝

若要在應(yīng)用程序中使用實(shí)體框架技術(shù),首先需要安裝實(shí)體框架程序包。在菜單欄中“網(wǎng)站”的下拉菜單里選擇“管理NuGet程序包(N)…”,安裝Entity Framework,點(diǎn)擊“安裝”,即可將實(shí)體框架下載并安裝到解決方案中。

3.2 ADO.NET實(shí)體數(shù)據(jù)模型的創(chuàng)建

1) 在菜單欄中“網(wǎng)站”的下拉菜單中選擇“添加新項(xiàng)”,之后選擇“ADO.NET實(shí)體數(shù)據(jù)模型”,點(diǎn)擊添加,根據(jù)實(shí)體數(shù)據(jù)模型向?qū)?chuàng)建實(shí)體數(shù)據(jù)模型。

2) 在接下來(lái)有兩種模型選擇內(nèi)容:一種是“從數(shù)據(jù)庫(kù)生成”,即從已設(shè)計(jì)好的數(shù)據(jù)庫(kù)直接生成實(shí)體數(shù)據(jù)模型;另一種是“空模型”,即由開發(fā)人員重新設(shè)計(jì)實(shí)體數(shù)據(jù)模型,之后以手動(dòng)方式由實(shí)體框架根據(jù)實(shí)體數(shù)據(jù)模型中的實(shí)體對(duì)象及對(duì)象關(guān)系等生成相應(yīng)的數(shù)據(jù)庫(kù)。因?yàn)樵W(wǎng)絡(luò)課程已有一個(gè)完整的數(shù)據(jù)庫(kù),所以此處選擇“從數(shù)據(jù)庫(kù)生成”。

3) 點(diǎn)擊下一步,進(jìn)入連接數(shù)據(jù)庫(kù)的向?qū)?,在“新建連接”中連接到自己的SQL Server服務(wù)器,然后選擇已有數(shù)據(jù)庫(kù),同時(shí)會(huì)生成實(shí)體連接字符串。

4) 點(diǎn)擊下一步,選擇需要在模型中包含的數(shù)據(jù)庫(kù)對(duì)象,這里選擇“表”,其他保持默認(rèn)。

5) 點(diǎn)擊完成,在App_Code文件夾中生成一個(gè)后綴名為.edmx的文件。Visual Studio 2015集成開發(fā)環(huán)境提供了一個(gè)可視化的實(shí)體數(shù)據(jù)模型編輯工具,即ADO.NET Entity Data Model Designer(或稱Entity Designer),在Entity Designer中能夠可視化的創(chuàng)建并編輯實(shí)體、實(shí)體之間的關(guān)系、數(shù)據(jù)庫(kù)和實(shí)體類的對(duì)應(yīng)關(guān)系及集成關(guān)系等。Entity Designer還提供了對(duì)象關(guān)系模型的效驗(yàn)功能。

Web.config文件保存了所創(chuàng)建的實(shí)體數(shù)據(jù)模型對(duì)應(yīng)的數(shù)據(jù)庫(kù)連接。

通過創(chuàng)建實(shí)體數(shù)據(jù)模型可自動(dòng)生成相關(guān)代碼,使程序員在與數(shù)據(jù)打交道時(shí)無(wú)需再關(guān)注底層數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu),而將注意力轉(zhuǎn)向數(shù)據(jù)表對(duì)應(yīng)的實(shí)體類。

4 應(yīng)用實(shí)體框架技術(shù)實(shí)現(xiàn)網(wǎng)絡(luò)課程交互模塊

在Web應(yīng)用程序中,不同訪問者的使用權(quán)限有所不同。在本網(wǎng)絡(luò)課程中,非學(xué)員用戶可以瀏覽網(wǎng)站中的信息公告,學(xué)習(xí)網(wǎng)站內(nèi)提供的學(xué)習(xí)教程以及下載網(wǎng)站中提供的源代碼實(shí)例等,但是沒有進(jìn)行模擬測(cè)試的權(quán)限。所以,如果用戶想要進(jìn)行模擬測(cè)試的話,必須先注冊(cè)成為該網(wǎng)站的學(xué)員,之后登錄到網(wǎng)站中方可進(jìn)行模擬測(cè)試。

1) 用戶注冊(cè)

新學(xué)員注冊(cè)時(shí),需要填寫用戶名、設(shè)置密碼并填寫郵箱地址等信息。另外,學(xué)員信息表(userName)中用戶名必須唯一,所以系統(tǒng)首先會(huì)對(duì)該用戶名進(jìn)行驗(yàn)證,如果用戶名已存在,則提醒用戶該名稱已被注冊(cè),代碼如下:

//驗(yàn)證用戶填寫的信息是否符合要求

var allrecords = mydb.userName.Where(c => c.userName1 ==username );

if (allrecords.Count() >= 1)

{ Label_name.Text = "該學(xué)員名已被注冊(cè)!";}

信息填寫無(wú)誤后,將新的紀(jì)錄添加到學(xué)員信息表(userName)中,代碼如下:

//添加記錄

userName myrecord = new userName() {userName1 =username,userPass =password ,textEmail =mail ,tate =DateTime.Now,inteGral =0,postNumber =0,privilege ="1" };

mydb.userName.Add(myrecord );

mydb.SaveChanges();

//顯示提示信息框,并跳轉(zhuǎn)到Login.aspx頁(yè)面

Response.Write("");

//清空文本框中的信息

TextBox_name.Text = TextBox_password.Text =TextBox_password2.Text = TextBox_mail.Text = TextBox_check.Text = "";

2) 用戶登錄

如果是學(xué)員身份登錄,則該網(wǎng)站的訪問量不變;如果是非學(xué)員身份(即guest)登錄,則網(wǎng)站訪問量增加1,登錄信息表(infoTable)中的數(shù)據(jù)隨之更新,主要代碼如下:

Application["guestsum"] = long.Parse(Application["guestsum"].ToString()) + 1;

Session["stuno"] = long.Parse(Application["guestsum"].ToString());

Session["stuname"] = "guest";

//將最新的guest號(hào)寫入infoTable

var itemrecord = mydb.infotable.Where(c => c.itemname == "guestlogin");

if (itemrecord.Count() > 0)

{ var firstrecord = itemrecord.First();

firstrecord.itemvalue = Session["stuno"].ToString ();}

mydb.SaveChanges();

4.1 實(shí)體框架技術(shù)在模擬測(cè)試模塊中的應(yīng)用

網(wǎng)絡(luò)課程模擬測(cè)試模塊通常有這些題型,即判斷題、單選題、填空題、簡(jiǎn)單題等,此處以單選題為例來(lái)詳細(xì)說(shuō)明運(yùn)用實(shí)體框架技術(shù)來(lái)進(jìn)行數(shù)據(jù)存取的具體使用方法。

1) 試題索引頁(yè)

試題索引頁(yè)主要使用GridView控件顯示數(shù)據(jù)試卷編號(hào),選擇“新建數(shù)據(jù)源”后,在配置數(shù)據(jù)源時(shí)選擇“Entity”綁定數(shù)據(jù)表。

數(shù)據(jù)源配置代碼如下:

在頁(yè)面的Page_Load()即裝載事件中添加代碼,將單選試題加載到頁(yè)面中,以第一道題為例,代碼如下:

protected void Page_Load(object sender, EventArgs e)

{jygc_courseEntities mydb = new jygc_courseEntities();//得到數(shù)據(jù)庫(kù)實(shí)體對(duì)象

string id = Request.QueryString["id"];//頁(yè)面間傳值,傳遞的是試卷編號(hào)

if (id == null)

{id = "1";}

if (!IsPostBack)

{//初始化相關(guān)數(shù)據(jù)

this.Label1.Text = this.Label1.Text + id.ToString();//試卷編號(hào)

//單選題試題

//單選題1

var danxuan_1 = mydb.shiTiTable.Where(c=>(c.shiJuanHao ==id)&&(c.tiXing =="單選題")&&(c.tiHao =="1"));//查詢?cè)嚲砭幪?hào)為傳遞的試卷編號(hào)且試題號(hào)為1的單選題的記錄

var dx_1 = danxuan_1.First();

this.dx_1.Text = dx_1.tiWen;

this.dxt_1_a.Text = "?;A、" + dx_1.xuanXiangA;

this.dxt_1_b.Text = "?;B、" + dx_1.xuanXiangB;

this.dxt_1_c.Text = "?;C、" + dx_1.xuanXiangC;

this.dxt_1_d.Text = "?;D、" + dx_1.xuanXiangD;

}}

2) 保存學(xué)員答題結(jié)果和成績(jī)

學(xué)員做完題目之后單擊提交按鈕,根據(jù)當(dāng)前用戶當(dāng)前的登錄信息,判斷數(shù)據(jù)的存取行為。

如果該學(xué)員還未登錄,則需要登錄后才可進(jìn)行試題模擬,之后再進(jìn)行進(jìn)一步的判斷,在單選題提交按鈕的單擊事件中添加代碼如下:

//如果已經(jīng)做過此試卷,則刪除原有記錄

//刪除答案表中原有記錄

var danxuandaan = mydb.stuDaTiTable.Where(c => (c.stuno == stuno) && (c.stuname == stuname) && (c.shiJuanHao == id) && (c.tiXing == "單選題"));

if (danxuandaan.Count() > 0)

{foreach (var d in danxuandaan)

{ mydb.stuDaTiTable.Remove(d); }//移除答案表中原有的記錄

mydb.SaveChanges(); }//保存數(shù)據(jù)庫(kù)

//刪除成績(jī)表中原有的成績(jī)

var danxuanchengji = mydb.stuChengJiTable.Where(c => (c.stuno == stuno) && (c.stuname == stuname) && (c.shiJuanHao == id) && (c.tiXing == "單選題"));

if (danxuanchengji.Count() > 0)

{foreach (var c in danxuanchengji)

{ mydb.stuChengJiTable.Remove(c); }//移除成績(jī)表中原有成績(jī)記錄

mydb.SaveChanges();}

將該學(xué)員新的答題結(jié)果保存至學(xué)員答題表(stuDaTiTable)中,代碼如下:

//獲取每道單選題的答案

//單選題1

if (this.dxt_1_a.Checked == true)

{dx_01 = "A";}

if (this.dxt_1_b.Checked == true)

{dx_01 = "B";}

//保存單選題答案至答案表

//單選題1

stuDaTiTable danxuandaan_1 = new stuDaTiTable() { stuno = stuno, stuname = stuname, shiJuanHao = id, tiXing = "單選題", tiHao = "1", stuDaAn = dx_01 };

mydb.stuDaTiTable.Add(danxuandaan_1); //添加一條新紀(jì)錄

mydb.SaveChanges();

根據(jù)學(xué)員的答題結(jié)果計(jì)算所得分?jǐn)?shù),并將新的分?jǐn)?shù)添加到學(xué)員成績(jī)數(shù)據(jù)表中,代碼如下:

//獲取單選題的分?jǐn)?shù)

int dx_sum = 0;//總分?jǐn)?shù)

//單選題1

var danxuanfenshu_1 = mydb.shiTiTable.Where(c => (c.shiJuanHao == id) && (c.tiXing == "單選題") && (c.tiHao == "1"));

var dxt_1 = danxuanfenshu_1.First();

if (dx_01 == dxt_1.daAn)

{dx_sum = dx_sum + Convert.ToInt32(dxt_1.fenZhi); }

//保存單選題成績(jī)至成績(jī)表

stuChengJiTable danxuanchengji_new1 = new stuChengJiTable() { stuno = stuno, stuname = stuname, shiJuanHao = id, tiXing = "單選題", testTime = null, chengJi = dx_sum.ToString() };

mydb.stuChengJiTable.Add(danxuanchengji_new1);

mydb.SaveChanges();

this.Image_dx.Visible = true;

this.Label_dxt_fs.Visible = false;

學(xué)員完成模擬測(cè)試后,點(diǎn)擊“完成測(cè)試并查看答案”的按鈕后,頁(yè)面顯示該學(xué)員每道題的正誤,如果錯(cuò)誤,顯示正確答案。

查看測(cè)試成績(jī)的代碼如下:

//單選題成績(jī)

var dxt_chengji = mydb.stuChengJiTable.Where(c => (c.stuno == stuno) && (c.stuname == stuname) && (c.shiJuanHao == id) && (c.tiXing == "單選題")); (下轉(zhuǎn)第125頁(yè))

(上接第97頁(yè))

if (dxt_chengji.Count() > 0)

{var dxt_1 = danxuant_1.First();

var dxt_fenshu = dxt_chengji.First();

this.Label_dxt_fs.Visible = true;

this.Label_dxt_fs.Text = "單選題分?jǐn)?shù):" + dxt_fenshu.chengJi;

if (dxt_1.stuDaAn == dx_1.daAn)

{ this.Image_dxt_01.ImageUrl = "~/images/right.jpg";}

else

{ this.Image_dxt_01.ImageUrl = "~/images/wrong.jpg";

this.Label_dxt_daan01.Visible = true;

this.Label_dxt_daan01.Text = "正確答案:" + dx_1.daAn; } }

else

{ this.Label_dxt_fs.Visible = true;

this.Label_dxt_fs.Text = "還未測(cè)試!";}}

參考文獻(xiàn):

[1] 李知杰,趙健飛.基于EF的數(shù)據(jù)建模方法[J].軟件導(dǎo)刊,2015,14(8):55-56.

[2] 楊小彥.基于ASP.NET MVC和實(shí)體框架的科技項(xiàng)目管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].蘭州:蘭州交通大學(xué),2015.

[3] 鄧軍.基于EF的N層架構(gòu)的藝術(shù)學(xué)院門戶系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 廈門:廈門大學(xué),2014.

猜你喜歡
網(wǎng)絡(luò)課程
虛擬化技術(shù)在計(jì)算機(jī)教學(xué)中的應(yīng)用
網(wǎng)絡(luò)課程設(shè)計(jì)中學(xué)習(xí)動(dòng)力培養(yǎng)策略研究
高校思政課網(wǎng)絡(luò)教育陣地開辟的探索與研究
淺析混合學(xué)習(xí)模式下的教師培訓(xùn)網(wǎng)絡(luò)課程設(shè)計(jì)策略
文教資料(2016年19期)2016-11-07 11:12:15
哈尔滨市| 温泉县| 广水市| 思茅市| 鹤壁市| 长岭县| 永德县| 屏东市| 祁门县| 育儿| 洪洞县| 贵阳市| 金山区| 周口市| 清涧县| 广宗县| 金阳县| 社会| 赤城县| 井陉县| 阜康市| 九寨沟县| 崇礼县| 呼图壁县| 鄂尔多斯市| 襄城县| 蛟河市| 合阳县| 瑞安市| 青川县| 阿拉善盟| 陕西省| 磐石市| 商河县| 南木林县| 滨海县| 革吉县| 香港 | 廊坊市| 泾源县| 泗阳县|