第17章學(xué)生管理系統(tǒng)entity framework在中應(yīng)用_第1頁
第17章學(xué)生管理系統(tǒng)entity framework在中應(yīng)用_第2頁
第17章學(xué)生管理系統(tǒng)entity framework在中應(yīng)用_第3頁
第17章學(xué)生管理系統(tǒng)entity framework在中應(yīng)用_第4頁
第17章學(xué)生管理系統(tǒng)entity framework在中應(yīng)用_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第17 學(xué)生管理系統(tǒng)(EntityFrameworkASP.NET在ASP.NET中使用EntityFramework進(jìn)行數(shù)據(jù)庫數(shù)據(jù)的。EntityFramework是一個(gè)對(duì)象關(guān)系映射工具,它能夠自動(dòng)一個(gè)創(chuàng)建數(shù)據(jù)層。避免手動(dòng)創(chuàng)建數(shù)據(jù)類帶EntityFrameworkASP.NETWebForm項(xiàng)目中的應(yīng)用。ntityamewokEnityk學(xué)生管理系統(tǒng)使用了先創(chuàng)建數(shù)據(jù)庫和表,再生成實(shí)體的模型。因?yàn)橄扔袑?shí)體類還是先有表在面向?qū)ο蟮氖澜缫恢笔且粋€(gè)具有爭議的話題,開發(fā)人員應(yīng)該根據(jù)項(xiàng)目的規(guī)模和需求來靈活處理這樣的需求。17.1所示的頁面,在圖17.1學(xué)生管理系統(tǒng)首頁 17.2學(xué)生人數(shù)統(tǒng)單擊關(guān)于后,將進(jìn)入到學(xué)生人數(shù)統(tǒng)計(jì)窗口,在該窗口中對(duì)學(xué)生入學(xué)日期及人數(shù)進(jìn)17.2所示。 圖17.3編輯和查找學(xué) 圖17.4課程管理窗17.4所示。17.5所示。17.5整個(gè)系統(tǒng)使用ASP.NETWebForm和EntityFramework實(shí)現(xiàn)本示例要考慮EntityFrameworkASP.NET的窗體表單控件進(jìn)行關(guān)聯(lián),獲取顯66OfficeAssignment:分配信息表OnlineCourse:課程信息表17.617.6表17.1人員表字段描NNNYY17.2CourseInstructorNN17.3CourseNNNN系別17.4DepartmentN自增長的記錄IdNNNN17.5StudentGradeN登記N課程Y學(xué)生decimal(3,Y表17.6OfficeAssignment分配表字段描N教師NN表17.7OnlineCourse課程表字段描N課程N(yùn)表17.8OnsiteCourse課程表字段描N課程N(yùn)NNADO.NETEntityFrameworkDAL的彈出的“添加新項(xiàng)”窗口中選擇“數(shù)據(jù)|ADO.NET17.7所示。圖17.7新建ADO.NET實(shí)體數(shù)據(jù)模 圖17.8從數(shù)據(jù)庫生成實(shí)體模SchoolModel.edmx,單擊確定按鈕,VisualStudio2010將進(jìn)入到創(chuàng)建實(shí)體17.8擇數(shù)據(jù)庫連接頁面,如果不存在到School.mdf數(shù)據(jù)庫文件的連接,需要單擊“新建連接” SQLServer數(shù)據(jù)庫文件,如圖17.9所示。圖17.9創(chuàng)建到數(shù)據(jù)庫文件的連 圖17.10選擇數(shù)據(jù)庫文單擊測試連接按鈕,查看連接是否成功建立。單擊確定按鈕回到選擇數(shù)據(jù)連接窗口。將Web.Config中的實(shí)體連接設(shè)置加存為復(fù)選框選中并指定一個(gè)另存為的字符串如圖17.11注意:ASP.NET中的|DataDirectory|App_Data文件夾,因此可以使用|DataDirectory|\School.mdf來取代完整的路徑名稱。圖17.11選擇數(shù)據(jù)庫連接窗 圖17.12選擇數(shù)據(jù)庫對(duì)象窗17.12所示。sysdiagram之外的所有的表,然后單擊完成按鈕,VisualStudio2010將ADO.NET17.13所示。17.13ADO.NET一對(duì)零或一關(guān)系,用1和0..1表示:比如對(duì)象可能有對(duì)應(yīng)到分配也可能因?yàn)槭菍W(xué)生,不存在分配問題,因此是一對(duì)零或一的關(guān)系,如圖17.14所示的OfficeAssignment17.141一對(duì)多關(guān)系,用1..*表示:比如一個(gè)實(shí)體或能或有或沒有關(guān)聯(lián)到一個(gè)Grade屬性是空的,也就是說,一個(gè)學(xué)生可能沒有登記任何課程,可能已經(jīng)登17.15所示。17.15多對(duì)多關(guān)系,用*..*表示,比如一個(gè)實(shí)體可能有或沒有關(guān)聯(lián)到課程實(shí)體,Course可能有也可能沒有關(guān)聯(lián)到實(shí)體,換句話說,一個(gè)教師可能教多17.16所示。17.16中多了一個(gè)導(dǎo)航屬性,實(shí)體的導(dǎo)航屬性到相關(guān)的實(shí)體,比如中有一個(gè)Courses屬性,該屬性包含了Course實(shí)體的集合,這些集合是與相關(guān)聯(lián)的實(shí)體集。另一個(gè)數(shù)據(jù)庫和數(shù)據(jù)模型的不同之處是多對(duì)多關(guān)聯(lián),例如和Course表是多對(duì)多的,因此在CourseInstructor來作為中間關(guān)聯(lián),而使用導(dǎo)航屬性允許用戶獲得中相CourseCourse中獲取到相關(guān)的實(shí)體,不需要一個(gè)中間表。17.17所示。17.18所示。實(shí)體框架使用XML來數(shù)據(jù)庫、數(shù)據(jù)模型和映射信息,實(shí)際上SchoolModel.edmxXMLXML文件。 圖17.17模型瀏覽 圖17.18查看表音映射關(guān)學(xué)生管理系統(tǒng)使用ADO.NET實(shí)體模型,由于屬于WebForm應(yīng)用程序,因此可以使用管理系統(tǒng)使用了母版頁來統(tǒng)一整體風(fēng)格,在母版頁中使用了控件來實(shí)現(xiàn)導(dǎo)航菜單效項(xiàng),菜單的菜單編輯器如圖17.18所示。17.1817.1"runat="server""IncludeStyleBlock="false""runat="server""IncludeStyleBlock="false" ItemNavigateUrl="~/Default.aspx"Text="主頁 ItemNavigateUrl="~/About.aspxText="關(guān)于 ItemNavigateUrl="~/Students.aspxText="學(xué)生 ItemNavigateUrl="~/StudentsAdd.aspx"Text="添加學(xué)生 ItemNavigateUrl="~/Courses.aspx"Text="課程 ItemNavigateUrl="~/CoursesAdd.aspx"Text="添加課程 ItemNavigateUrl="~/Instructors.aspxText="教師ItemNavigateUrl="~/InstructorsCourses.aspx"Text="課程分配ItemNavigateUrl="~/OfficeAssignments.aspx"分配 ItemNavigateUrl="~/Departments.aspx"Text="系別 ItemNavigateUrl="~/DepartmentsAdd.aspx"Text="添加科系 >WebFormVisualStudio2010中選擇使用母版頁的17.19EntityDataSourceGridView控從工具箱的數(shù)據(jù)欄中拖一個(gè)EntityDataSource控件,然后拖一個(gè)GridView控件放到Student.aspx頁面。選中EntityDataSource控件,單擊智能,從彈出的菜單中選擇“配置數(shù)據(jù)源…ObjectContext17.20所示。圖17.20配置ObjectContext窗 圖17.21配置數(shù)據(jù)選擇窗People實(shí)體,該實(shí)體與數(shù)據(jù)表對(duì)應(yīng)。然后選中“選擇所有值(實(shí)體值)”17.21認(rèn)情況下數(shù)據(jù)庫將避免在表中的行刪除時(shí)影響到其他的表,用戶能手動(dòng)的先刪除相關(guān)的表行,也可以配置數(shù)據(jù)庫當(dāng)刪除中的行時(shí)自動(dòng)刪除這些關(guān)聯(lián)表行。開發(fā)人員可StudentGrade和的外鍵約束中,可以設(shè)置表單的級(jí)聯(lián)更新和級(jí)聯(lián)刪除,右擊表關(guān)系,選擇屬性,進(jìn)入到關(guān)系的屬性設(shè)置窗口,展開INSERT和UPDATE規(guī)范,指定刪除規(guī)則為“層疊”,經(jīng)過這樣的設(shè)置當(dāng)刪除中的行時(shí),會(huì)級(jí)聯(lián)的刪除StudentGrade中相關(guān)的表行,如圖17.22所示。圖17.22設(shè)置表的級(jí)聯(lián)更新或刪除規(guī) 圖17.23設(shè)置實(shí)體的級(jí)聯(lián)更樣的在實(shí)體關(guān)系設(shè)計(jì)器中,選中與StudentGrade實(shí)體之間的一對(duì)多關(guān)系,指定端一OnDeleteCascade17.23所示。<asp:EntityDataSource runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"EntitySetName="People"EntityTypeFilter="Student"EnableDelete="True"<asp:EntityDataSource runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"EntitySetName="People"EntityTypeFilter="Student"EnableDelete="True"EnableUpdate="True"Include="StudentGrades"People,EnableDeleteEnableUpdate指定是否允許更新和刪除,Include指定是否獲用GridView右上角的智能,從彈出的GridView任務(wù)窗口中指定數(shù)據(jù)源,如圖17.24所圖17.24指定GridView數(shù)據(jù) 圖17.25編輯GridView字口中設(shè)置列,如圖17.25所示,VisualStudio2010自動(dòng)生成了如代碼17.3所示的源代代碼代碼 GridView控<asp:GridViewID="StudentsGridView" ging="True"AutoGenerateColumns="False"AutoGenerateColumns="False" mandFieldShowDeleteButton="True"ShowEditButton="True"<%--創(chuàng) 模板列--<asp:TemplateField "<asp:DynamicControlID="LastNameTextBox"runat="server"DataField="LastName"Mode="Edit"/><asp:DynamicControlID="FirstNameTextBox"runat="server"DataField="FirstMidName"Mode="Edit"<asp:DynamicControlrunat="server"DataField="LastName"Mode="ReadOnly"<asp:DynamicControlrunat="server"DataField="FirstMidName"Mode="ReadOnly"<asp:DynamicFieldDataField="EnrollmentDate"HeaderText="入學(xué)日期SortExpression="EnrollmentDate"<asp:TemplateFieldHeaderText="課程數(shù)量<asp:LabelID="Label1"Text='<%#Eval("StudentGrades.Count")EntityDataSourceEntityFramework設(shè)計(jì)的實(shí)體類來顯示數(shù)據(jù)。注意到課程數(shù)量使用了People實(shí)本集的導(dǎo)航屬性StudentGrades集合的Count值來設(shè)置這樣使用是因?yàn)樵贓ntityDataSource的中指定了Include,如圖17.24所示。17.24IncludeStudentAdd.aspxDetailsView控件。拖一EntityDataSource控件到頁面上,EntityDataSourceStudents.aspx頁面相同,DetailsViewEntityDataSourceDetailsView與GridView最大的不同在于該控件一次只顯示一行記錄,一般用于編輯或者是插入數(shù)據(jù)的場合,EntityDataSource的代碼如代碼17.4所示。代碼代碼 GridView控<asp:EntityDataSourceID="Studen tityDataSource"runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"EntitySetName="People"EntityTypeFilter="Student"EnableInsert="True"代碼中依然指定ContextTypeName屬性值為SchoolEntities實(shí)體,指定實(shí)體集EntitySetNamePeopleEntityTypeFilterStudent。17.2517.25向DetailsView課程管理包含顯示課程信息,添加新的課程,將演示如何使用EntityDataSource與ASP.NETWeb服務(wù)器控件進(jìn)行結(jié)合來數(shù)據(jù)。這個(gè)示例將演示一些EntityDataSource的DropDownListEntityDataSource控件,將該控件的實(shí)體集設(shè)為Departments,如代碼17.5所示:代碼代碼 <asp:EntityDataSource runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EntitySetName="Departments"Select="it.[DepartmentID],Select的指定,SelectEntityDataSource特有的屬性,用于指定要投影出新對(duì)象的屬性名稱,示例中指定了DepartmentID和Name這兩個(gè)屬性,it代表Instance,DropDownListEntityDataSourceDataTextFieldNameDataValueFieldDepartmentID17.6所示。代碼代碼 <asp:DropDownListID="DepartmentsDropDownList"runat="server"DataSourceID="Departmen DataTextField="Name"DataValueField="DepartmentID"須要了解,如果啟用了EnableUpdate、EnableDelete或EnableInsert,則不能設(shè)置Select,因當(dāng)用戶在DropDownList中選擇了某一個(gè)系別后,會(huì)觸發(fā)一次PostBack,并更新一個(gè)GridView,因此接下來向頁面添加一個(gè)EntityDataSource控件和GridView控件。因?yàn)镋ntityDtaSourceDropDownListWhereParameters屬性。設(shè)置好EntityDataSource的ContextTypeName和EntitySetNameEntityDataSourceWhere17.26所示的Where17.26在該窗口中,指定參數(shù)源為“ControlIDDropDownList控按鈕完成設(shè)置,VisualStudio2010將生成如代碼17.7所示的源代碼。代碼代碼 帶參數(shù)的EntityDataSource控<%--EntityDataSource的AutoGenerateWhereClause設(shè)置為True表示自動(dòng)生成Where語句<asp:EntityDataSourcerunat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="false"AutoGenerateWhereClause="True"EntitySetName="Courses"<%--指定控件參數(shù)<%--控件為系別DropDownList的ID屬性名稱為SelectedValueDataValueField值<asp:ControlParameterControlID="DepartmentsDropDownList"Name="DepartmentID"PropertyName="SelectedValue"Type="Int32"AutoGenerateWhereClauseTrue,表示由系統(tǒng)自動(dòng)生成WhereWhere屬性的值為空白,EntityDataSourceWhereParameters集合WHERE子句。在WhereParameters使用了ControlParameter,表示參數(shù)的值來源于一個(gè)控件ControlID,DepartmentIDInt32SelectedValue屬性。GridViewDropDownListGridView控件中的值列表。ASP.NET4.0中QueryExtender控件。此需要先向頁面上添加一個(gè)EntityDataSource控件。指定EntityDataSource控件的相關(guān)屬性后,接下來添加一個(gè)QueryExtender控件,指定該控件的TargetControlID為前面的EntityDataSource控件,接下來為QueryExtender控件指定SearchExpression表達(dá)式和OrderByExpression表達(dá)式,代碼如代碼17.8所示:代碼代碼 QueryExtender控<asp:EntityDataSourceID="SearchEntityDataSource"runat="server"EnableFlattening="False"EntitySetName="Courses"Include="Department"><%--用來增強(qiáng)查詢的QueryExtenderTargetControlID與實(shí)體源關(guān)聯(lián)<asp:QueryExtenderID="SearchQueryExtender"runat="server"TargetControlID="SearchEntityDataSource"><%--指定查詢表達(dá)式<asp:ControlParameterControlID="SearchTextBox"<%--指定排序表達(dá)式<asp:OrderByExpressionDataField="Department.Name"<asp:ThenByDataField="Title"Direction="Ascending"首先了SearchEntityDataSource這個(gè)EntityDataSource控件,因?yàn)橐@示系別信息,因此Include了Department實(shí)體。接下來定義一個(gè)QueryExtender控件,指定控件的TargetControlIDSearchEntityDataSourceSearchExpression,SearchType指定為StartsWith,表示匹配與指定字符串開頭相事的字符串。指定SearchExpression的ControlParameterSearchTextBoxOrderByExpression指定排序方式,ThenBy指定子級(jí)排序。GridView控件來顯示查詢的結(jié)果,GridViewDataSourceID屬性指定為SearchEntityDataSource控件,并使用設(shè)計(jì)器或者是使用性的代碼設(shè)置好列。QueryExtender17.2717.27QueryExtender添加課程功能與添加學(xué)生功能類似,使用了一個(gè)EntityDataSource控件和一個(gè)DetailsViewDetailsView控件內(nèi)部,使用一個(gè)模板列顯示了系別列表供用戶選擇。首先依然添加一個(gè)EntityDataSource控件,指定ContextTypeName為模型名稱,指定EntitySetNameCourse,并啟用刪除和插入。DetailsViewDropDownList控件顯示系別信息,因此需EntityDataSourceDropDownList控件,17.28所示。17.28InsertItemTemplateInsertItemTemplateEntityDataSource控件,讓DropDownList控件綁定到EntityDataSource控件,如代碼17.9所示代碼代碼 新增課<%--綁定到該EntityDataSource控件的DetailsView<asp:DetailsViewID="CoursesDetailsView"runat="server"DataKeyNames="CourseID"DefaultMode="Insert"<%--定義標(biāo)準(zhǔn)的綁定列<asp:BoundFieldDataField="CourseId"HeaderText="編號(hào)<asp:BoundFieldDataField="TitleHeaderText="標(biāo)題<asp:BoundFieldDataField="CreditsHeaderText="信譽(yù)<%--定義顯示系別的模板列<asp:TemplateFieldHeaderText="系別<%--EntityDataSourceDropDownList提供數(shù)據(jù)<asp:EntityDataSourceID="Departmen EnableDelete="True"EnableFlattening="False"EntitySetName="Departments"<%--DropDownList控件<asp:DropDownListID="DepartmentsDropDownList"runat="server"DataSourceID="Departmen DataTextField="Name"DataValueField="DepartmentID"<%--顯示插入按鈕 mandFieldShowInsertButton="True"2DropDownList控件中了OnInit事件,該事件會(huì)在運(yùn)行時(shí)將DepartmentsDropDownList變量指定為當(dāng)前的DropDownList實(shí)體,另一個(gè)是Name,而表中需要的是DepartmentID,因此需要獲取到DropDownList當(dāng)前的DataValueFieldOnItemInserting17.10所示。代碼代碼 新增課protectedvoidDepartmentsDropDownList(objectsender,EventArgs{{=指定}protectedvoidCoursesDetailsView_ItemInserting(objectsender,DetailsViewInsertEventArgse){vardepartmentID=//獲取選擇的項(xiàng)的系別ID}ItemInsertingSelectedValueInt32類型的值,得到在教師管理模塊中,將使用到EntityDataSource的一些較為復(fù)雜的功能,包括使用EntityDataSource進(jìn)行排序、過濾、使用子項(xiàng)集合、分組等功能。教師管理功能主要包含添加管理教師,分配,課程安排等功能。EntityDataSource17.29所示。17.29首先從工具箱中拖一個(gè)EntityDataSourceContextTypeNameEntitySetName以及EntityTypeFilter屬性,如代碼17.11所示代碼代碼 教師管理<asp:EntityDataSource<asp:EntityDataSourceID="InstructorsEntityDataSource"runat="server" <%--過濾實(shí)體條件--%> InstructorPeople17.30所示。17.30InstructorEntityTypeFilterPeople實(shí)體中的所有的教師。放一個(gè)GridView控件到頁面上,代碼中使用了div來進(jìn)行左右上下分欄的布局。然后為GridView控件添加幾個(gè)模板列。分配列來自于在EntityDataSource中IncludeOfficeAssignment表中的內(nèi)容,導(dǎo)航屬性的值只能進(jìn)行查看,是不能直接進(jìn)行編輯和更新的,但是可以通過在代碼中來設(shè)置更新的值,GridView控件的如代碼17.12所示代碼代碼 教師管理GridView控<asp:GridViewID="InstructorsGridView"runat="server" ging="True"AllowSorting="True"AutoGenerateColumns="False"DataKeyNames=" <%--顯示選擇按鈕 mandFieldShowSelectButton="True"ShowEditButton="True"<%- <asp:TemplateField "<asp:LabelID="InstructorLastNameLabel"runat="server"Text='<%#Eval("LastName")%>'></asp:Label>,<asp:LabelID="InstructorFirstNameLabel"runat="server"Text='<%#Eval("FirstMidName")%>'></asp:Label><asp:TextBoxID="InstructorLastNameTextBox"runat="server"Text='<%#Bind("FirstMidName")%>'Width="7em"></asp:TextBox><asp:TextBoxID="InstructorFirstNameTextBox"runat="server"Text='<%#Bind("LastName")%>'Width="7em"></asp:TextBox><%--EvalBind時(shí),指定的顯示格式<asp:TemplateFieldHeaderText="雇傭日期<asp:LabelID="InstructorHireDa abel"runat="server"Text='<%#Eval("HireDate","{0:d}")%>'></asp:Label><asp:TextBoxID="InstructorHireDateTextBox"runat="server"Text='<%#Bind("HireDate","{0:d}")%>'Width="7em"></asp:TextBox><%--OfficeAssignmentLocation屬性<asp:TemplateFieldHeaderText=" <asp:LabelID="InstructorOfficeLabel"Text='<%#Eval("OfficeAssignment.Location")<asp:TextBoxID="InstructorOfficeTextBox"runat="server"Text='<%#Eval("OfficeAssignment.Location")%>'Width="7em"<%--定義文本框初始化事件<%--GridView的行顯示樣式<SelectedRowStyleOnrowupdatingGridView更新之前可以更新分配的信息。因?yàn)檫@個(gè)別使用Eval和Bind綁定實(shí)體集屬性中,由于分配是不能進(jìn)行直接更新的,因此不可TextBox當(dāng)用戶在分配的文本框中輸入的值,在進(jìn)行更新時(shí),onrowupdating事件觸發(fā),該事件將根據(jù)GridView控件中的指定的ID值查找分配記錄,然后將TextBox值賦給記錄字段,最后更新數(shù)據(jù)庫,OnRowUpdating17.13所示。protectedvoidInstructorsGridView_RowUpdating(objectsender,GridViewUpdateEventArgse){usingprotectedvoidInstructorsGridView_RowUpdating(objectsender,GridViewUpdateEventArgse){using(varcontextnew {varinstructorBeingUpdatedConvert.ToInt32(e.Keys[0]);//獲取主鍵值varofficeAssignment=(fromoincontext.OfficeAssignmentswhereo.InstructorID==instructorBeingUpdatedselecto).FirstOrDefault();//查找指定ID的 {//if(String.IsNullOrWhiteSpace(instructorOfficeTextBox.Text)=={if(officeAssignmentnull)//officeAssignment{//OfficeAssignment(instructorBeingUpdated,instructorOfficeTextBox.Text,null));}{}}{if(officeAssignment!={}} }catch {e.Cancel=ErrorMessageLabel.Visible=true;ErrorMessageLabel.TextErrorMessageLabel.Visible=true;ErrorMessageLabel.Text更新失敗.";}}}代碼首先獲取到GridView控件的主鍵值以獲取ID然后使用這個(gè)ID使用LINQ語法查詢OfficeAssignments實(shí)體中是否存在相應(yīng)記錄,如果不存在則創(chuàng)建一個(gè)新的值為空OfficeAssignment對(duì)象則調(diào)用DeleteObject刪除對(duì)象最后調(diào)用SaveChangesCatch語句塊中的異常處理語句。授課課程是使用EntityDataSource控件的Where屬性根據(jù)特定的ID查出來的,17.14所示。代碼代碼 授課課程EntityDataSource控<asp:EntityDataSourceID="CoursesEntityDataSource"<%--指定ContextTypeName屬性為實(shí)體模型名稱<%--Where查詢參數(shù)信息IDIN(SELECTVALUEIDFROMit.People<%--ControlParameterGridView的選擇值ControlID="InstructorsGridView"Type="Int32" ID"PropertyName="SelectedValue"/>Where屬性,指定了一個(gè)類似SQL的查詢語句這種SQL稱為實(shí)體SQLT-SQL非常相似只是實(shí)體SQL航屬性People中的ID是否存在,如果存在值為True否則為False。WhereParametersControlParameter為InstructorsGridView這個(gè)控件,PropertyName值為SelectedValue,也就是將選擇的名為ID字段的值傳給@ ID,從Course中查找條件滿足教師的人的課程信息。當(dāng)選中了某位教師后,會(huì)顯示出該教室的授課詳細(xì)信息列表。向頁面上添加一個(gè)DetailsView控件和一個(gè)EntityDataSource控件EntityDataSource控件使用Where參數(shù)關(guān)聯(lián)到課程GridView控件的SelectedValue屬性,EntityDataSource控件的如代碼17.15代碼代碼 課程明細(xì)EntityDataSource控<asp:EntityDataSourceID="CourseDetailsEntityDataSource"runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"<%--Where語句<%--Where條件參數(shù)--%>Where="it.CourseID@CourseID"<%--包含多個(gè)實(shí)體集的數(shù)據(jù) <%--Where參數(shù)列表<asp:ControlParameterControlID="CoursesGridView"Type="Int32"Name="CourseID"PropertyName="SelectedValue"/>EntityDataSource的中,ContextTypeNameEntitySetName與前面內(nèi)容的定it.CourseID=@CourseID,然后定義了一個(gè)WhereParameter為ControlParameter,控件ID為課程列表的GridView控件,屬性名稱為SelectedValue。17.16所示。protectedvoidCourseDetailsEntityDataSourceSelected(objectsender,EntityDataSourceSelectedEventArgse){varcourseprotectedvoidCourseDetailsEntityDataSourceSelected(objectsender,EntityDataSourceSelectedEventArgse){varcourse=if(course!=null){varstudentGrades=//CourseGradesListView.DataSourcestudentGrades}}EntityDataSourceSelectedEventArgsResult結(jié)果,再轉(zhuǎn)換為CourseCourseCourseCourse相關(guān)聯(lián)StudentGradesListView控件。EntityDataSourceDropDownList控件中來實(shí)現(xiàn),如代碼17.17所示。代碼代碼 教師列表數(shù)據(jù)<asp:EntityDataSourceID="InstructorsEntityDataSource"runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"EntitySetName="People"EntityTypeFilter="Instructor"Select="it.LastName+','+it.FirstMidNameASName, 選擇一位教師<asp:DropDownListID="InstructorsDropDownList"runat="server"DataSourceID="InstructorsEntityDataSource"AutoPostBack="true"DataTextField="Name"DataValueField=" Entitytaurce控件使用ect語句投影了新的對(duì)象,將名字進(jìn)行了合并,opitaextiedeaueFieldopitdexCangedaoundpulteropits后,綁定該教師可以分配的課程到另一個(gè)opDownLit,以及可以移除的課程到第三個(gè)opit控件。lateopDonLists1.18privatevoid{using(varcontextprivatevoid{using(varcontext=new{varallCourses=varvarinstructorIDvarinstructor=(frompinwherep. ID==instructorIDselectp).First();varassignedCourses List<Course>unassignedCourses=newList<Course>(); foreach(CoursecourseinallCourses) //遍歷所有課程{boolunassigned=foreach(CourseassignedCourseinassignedCourses)//{if(course.CourseIDassignedCourse.CourseID)判斷是否已分配unassigned=false;}if }UnassignedCoursesDropDownList.DataSourceunassignedCourses;//綁定到未分配列表UnassignedCoursesDropDownList.Visible=true;AssignedCoursesDropDownList.DataSource=assignedCourses;//綁定到已分配列表AssignedCoursesDropDownList.Visible=}}代碼首先獲取所有的課程信息列表,然后獲得到某個(gè)教師相關(guān)聯(lián)的課程的列表,這個(gè)List<Course>最后將獲得到的兩個(gè)列表綁定給兩個(gè)下拉列表框中。17.19所示。protectedvoidAssignCourseButtonClick(objectprotectedvoidAssignCourseButtonClick(objectsender,EventArgs{using(varcontext=new{varinstructorIDvarinstructor=(frompincontext.People wherep. ID==instructorIDselectvarcourseID varcourse=(fromcinwherec.CourseID==courseIDselectc).First();{CourseAssignedLabel.Text分配成功.";}catch{CourseAssignedLabel.Text分配不成功}CourseAssignedLabel.Visible=}}IDIDInstructorLINQCoursesID的課程,最后添加這個(gè)課程到教師課程列表中去。最后SaveChangesException區(qū)域的代碼。17.20所示。protectedvoidRemoveCourseButtonClick(objectprotectedvoidRemoveCourseButtonClick(objectsender,EventArgs{using(varcontext=new{varinstructorID //IDvarinstructor(frompin wherep. ID==instructorIDselectp).First();varcourseID //IDvarcourses=varcourseToRemove=newCourse();foreach(Coursecincourses){if(c.CourseID=={courseToRemove=}}}{CourseRemovedLabel.Text移除成功}catch {CourseRemovedLabel.Text移除不成功}CourseRemovedLabel.Visible=}}LINQ查詢來實(shí)現(xiàn),然后得到要?jiǎng)h除的課程的SaveChanges保存數(shù)據(jù)庫的更改,最后進(jìn)行重新數(shù)據(jù)綁定,并顯示移除成功消息,Catch語句塊中的異常處理代碼。當(dāng)單擊“關(guān)于”窗口時(shí),將顯示一個(gè)學(xué)生人數(shù)統(tǒng)計(jì)的框,在實(shí)現(xiàn)上使用了EntityDataSourceAbout.aspxEntityDataSource控EntityDataSourceSelectGroupBy語句,17.21所示。<asp:EntityDataSourceID="StudentStatisticsEntityDataSource"runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"EntitySetName="People"EntityTypeFilter="Student"<%--指定分組和排序字<asp:EntityDataSourceID="StudentStatisticsEntityDataSource"runat="server"ContextTypeName="ContosoUniversity.DAL.SchoolEntities"EnableFlattening="False"EntitySetName="People"EntityTypeFilter="Student"<%--指定分組和排序字段GroupBy="it.EnrollmentDate"<%--Count函數(shù)Select="it.EnrollmentDate,Count(it.EnrollmentDate)AS在中指定了GroupBy屬性是EnrollmentDate進(jìn)行分組,OrderBy排序字段也是EnrollmentDateSelectCount函數(shù)作為分組依據(jù),來統(tǒng)計(jì)中特定的入學(xué)日期GridView17.31所示。 圖17.31EntityDataSource分組統(tǒng)計(jì)功能實(shí) 圖17.32添加實(shí)體窗ADO.NETEntityFrameowrk和ASP.NETWebFormPeoplePeopleStudentInstructor17.32所示。Student來說,其EnrollmentDate是不能為空的,因此添加此標(biāo)量屬性,指定其值不能為空,如圖17.33的17.33 中派生出了Student和Instructor之后,現(xiàn)在 僅具有Instructor和Student實(shí)體通用的屬性,除了導(dǎo)航屬性不能移動(dòng)外,這個(gè)實(shí)體僅能在 實(shí)體,選擇“屬性”,然后在屬性窗口中將抽象屬性設(shè)置為True,如圖17.34所17.34ContextTypeNameEntityDataSetEntitySetName指定為基類在實(shí)體中調(diào)用過EntityFramework允許用戶指定實(shí)體類使用過程來進(jìn)行數(shù)據(jù),對(duì)于任何實(shí)體來說,可以指定使用創(chuàng)建、更新或刪除的過程。在數(shù)據(jù)模型中,可以添加對(duì)過程的,以便可以在EntityFramework中使用。在本小節(jié)中,將演示如何使用過程來向StudentInstructor實(shí)體中插入數(shù)據(jù)。在示例數(shù)據(jù)庫school.MDB中,已經(jīng)創(chuàng)建了一些用于添加、更新和刪除Student和Instructor的過程,首先要做的是需要將這些過程添加到實(shí)體模

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論