消費者入門 Entity Framework 4.0 Database First 和 ASP.NET 4 Web Form

By Tom Dykstra

Contoso University 範例 Web 應用程式示範如何使用 Entity Framework 4.0 和 Visual Studio 2010 建立 ASP.NET Web Forms應用程式。 範例應用程式是虛構 Contoso University 的網站。 其中包括的功能有學生入學許可、課程建立、教師指派。

本教學課程示範 C# 中的範例。 可下載的範例同時包含 C# 和 Visual Basic 中的程式碼。

資料庫優先

您可以使用 Entity Framework 中的資料有三種方式: Database FirstModel FirstCode First。 本教學課程適用于 Database First。 如需這些工作流程之間的差異的相關資訊,以及如何為您的案例選擇最佳工作流程的指引,請參閱 Entity Framework 開發工作流程

Web Form

本教學課程系列使用 ASP.NET Web Forms模型,並假設您知道如何在 Visual Studio 中使用 ASP.NET Web Forms。 如果沒有,請參閱ASP.NET 4.5 Web Form消費者入門。 如果您想要使用 ASP.NET MVC 架構,請參閱使用 ASP.NET MVC 與 Entity Framework消費者入門。

軟體版本

教學課程中所示 也適用于
Windows 7 Windows 8
Visual Studio 2010 Visual Studio 2010 Express for Web。 本教學課程尚未使用較新版本的 Visual Studio 進行測試。 功能表選取專案、對話方塊和範本有許多差異。
.NET 4 .NET 4.5 與 .NET 4 回溯相容,但本教學課程尚未使用 .NET 4.5 進行測試。
Entity Framework 4 本教學課程尚未使用較新版本的 Entity Framework 進行測試。 從 Entity Framework 5 開始,EF 預設 DbContext API 會使用 EF 4.1 引進的 。 EntityDataSource 控制項是設計來使用 ObjectContext API。 如需如何搭配 DbContext API 使用 EntityDataSource 控制項的詳細資訊,請參閱 此部落格文章

問題

如果您有與教學課程不直接相關的問題,您可以將問題張貼ASP.NET 至 entity Framework 論壇Entity Framework 和 LINQ to Entities 論壇,或StackOverflow.com

概觀

您將在這些教學課程中建置的應用程式是簡單的大學網站。

Contoso University 首頁的螢幕擷取畫面,其中顯示 [首頁]、[關於]、[學生]、[課程]、[講師] 和 [部門] 頁面的連結。

使用者可以檢視和更新學生、課程和教師資訊。 您將建立的一些畫面如下所示。

Image30

Image37

Image31

Image32

建立 Web 應用程式

若要開始教學課程,請開啟 Visual Studio,然後使用 ASP.NET Web 應用程式範本建立新的 ASP.NET Web 應用程式 專案:

Image01

此範本會建立已包含樣式表單和主版頁面的 Web 應用程式專案:

Image02

開啟 Site.Master 檔案,並將 「My ASP.NET Application」 變更為 「Contoso University」。

<h1>
    Contoso University
</h1>

尋找名為 NavigationMenu功能表控制項,並將它取代為下列標記,這會為您要建立的頁面新增功能表項目。

<asp:Menu ID="NavigationMenu" runat="server" CssClass="menu" EnableViewState="false"
                    IncludeStyleBlock="false" Orientation="Horizontal">
                    <Items>
                        <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Home" />
                        <asp:MenuItem NavigateUrl="~/About.aspx" Text="About" />
                        <asp:MenuItem NavigateUrl="~/Students.aspx" Text="Students">
                            <asp:MenuItem NavigateUrl="~/StudentsAdd.aspx" Text="Add Students" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Courses.aspx" Text="Courses">
                            <asp:MenuItem NavigateUrl="~/CoursesAdd.aspx" Text="Add Courses" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Instructors.aspx" Text="Instructors">
                            <asp:MenuItem NavigateUrl="~/InstructorsCourses.aspx" Text="Course Assignments" />
                            <asp:MenuItem NavigateUrl="~/OfficeAssignments.aspx" Text="Office Assignments" />
                        </asp:MenuItem>
                        <asp:MenuItem NavigateUrl="~/Departments.aspx" Text="Departments">
                            <asp:MenuItem NavigateUrl="~/DepartmentsAdd.aspx" Text="Add Departments" />
                        </asp:MenuItem>
                    </Items>
                </asp:Menu>

開啟 Default.aspx 頁面,並將名為 的 ContentBodyContent 控制項變更為下列專案:

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
    <h2>
        Welcome to Contoso University!
   </h2>
</asp:Content>

您現在有一個簡單的首頁,其中包含您要建立的各種頁面連結:

Contoso University 首頁的螢幕擷取畫面,其中顯示 [首頁]、[關於]、[學生]、[課程]、[講師] 和 [部門] 頁面的連結。

建立資料庫

針對這些教學課程,您將使用 Entity Framework 資料模型設計工具,根據現有的資料庫自動建立資料模型 (通常稱為 資料庫優先 方法) 。 本教學課程系列未涵蓋的替代方法是手動建立資料模型,然後讓設計工具產生腳本,以在 模型優先的方法 (建立資料庫) 。

針對本教學課程中使用的資料庫優先方法,下一個步驟是將資料庫新增至月臺。 最簡單的方式是先下載本教學課程隨附的專案。 然後以滑鼠右鍵按一下 App_Data 資料夾,選取 [ 新增現有專案],然後從下載的專案選取 School.mdf 資料庫檔案。

替代方法是遵循 建立學校範例資料庫的指示。 無論您是下載資料庫或建立資料庫,請將 School.mdf 檔案從下列資料夾複製到應用程式的 App_Data 資料夾:

%PROGRAMFILES%\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

(.mdf檔案的位置假設您使用 SQL Server 2008 Express.)

如果您從腳本建立資料庫,請執行下列步驟來建立資料庫關係圖:

  1. [伺服器總管] 中,依序展開 [資料連線]、[ School.mdf]、以滑鼠右鍵按一下 [資料庫關係圖],然後選取 [ 新增圖表]。

    Image35

  2. 選取所有資料表,然後按一下 [ 新增]。

    Image36

    SQL Server會建立資料庫關係圖,以顯示資料表、資料表中的資料行,以及資料表之間的關聯性。 您可以移動資料表來組織它們,不過您喜歡。

  3. 將圖表儲存為 「SchoolDiagram」,並加以關閉。

如果您下載本教學課程隨附的School.mdf檔案,您可以按兩下[伺服器總管] 中的 [資料庫關係圖] 底下的[SchoolDiagram] 來檢視資料庫關係圖。

Image38

此圖表看起來會像這樣 (資料表可能位於不同于此處所示的位置) :

Image04

建立 Entity Framework 資料模型

現在,您可以從這個資料庫建立 Entity Framework 資料模型。 您可以在應用程式的根資料夾中建立資料模型,但在本教學課程中,您會將其放在名為 DAL (for Data Access Layer) 的資料夾。

方案總管中,新增名為DAL的專案資料夾 (確定專案位於專案底下,而不是在方案下) 。

以滑鼠右鍵按一下 DAL 資料夾,然後選取 [ 新增 ] 和 [ 新增專案]。 在 [已安裝的範本] 底下,選取 [資料],選取 [ADO.NET 實體資料模型 範本],將它命名為 SchoolModel.edmx,然後按一下 [ 新增]。

Image05

這會啟動實體資料模型精靈。 在第一個精靈步驟中,預設會選取 [ 從資料庫產生] 選項。 按一下 [下一步] 。

Image06

在 [ 選擇您的資料連線 ] 步驟中,保留預設值,然後按 [ 下一步]。 預設會選取學校資料庫,且連線設定會儲存在 Web.config 檔案中作為 SchoolEntities

Image07

在 [ 選擇您的資料庫物件 ] 精靈步驟中,選取您稍早為圖表所建立 (以外的 sysdiagrams 所有資料表,) 然後按一下 [ 完成]。

Image08

建立模型之後,Visual Studio 會顯示 Entity Framework 物件的圖形表示, (對應至資料庫資料表的實體) 實體。 (與資料庫關係圖一樣,個別元素的位置可能與您在此圖中所見不同。如果您想要.) ,您可以將元素拖曳到周圍以符合圖例

Image09

探索 Entity Framework 資料模型

您可以看到實體圖表看起來與資料庫關係圖非常類似,但有幾個差異。 其中一個差異是在每個關聯結尾新增符號,指出資料表關聯性 (關聯類型在資料模型中稱為實體關聯) :

  • 一對零或一個關聯是以 「1」 和 「0..1」 表示。

    Image39

    在此情況下, Person 實體可能或可能不會與實體相關聯 OfficeAssignment 。 實體 OfficeAssignment 必須與實體相關聯 Person 。 換句話說,講師可能或可能不會指派給辦公室,而且任何辦公室只能指派給一位講師。

  • 一對多關聯以 「1」 和 「*」 表示。

    Image40

    在此情況下, Person 實體可能或可能沒有相關聯的 StudentGrade 實體。 實體 StudentGrade 必須與一個 Person 實體相關聯。 StudentGrade 實體實際上代表此資料庫中已註冊的課程;如果學生已在課程中註冊,而且還沒有成績,則 Grade 屬性為 Null。 換句話說,學生可能尚未在任何課程中註冊、在一個課程中註冊,或可能註冊多個課程。 註冊課程中的每個成績都僅適用于一位學生。

  • 多對多關聯是由 「*」 和 「*」 表示。

    Image41

    在此情況下, Person 實體可能或可能沒有相關聯的 Course 實體,而反向也是 true: Course 實體可能或可能沒有相關聯的 Person 實體。 換句話說,講師可能會教導多個課程,而多個講師可能會教授課程。 (在此資料庫中,此關聯性僅適用于講師;它不會將學生連結至課程。學生會透過 StudentGrades 資料表連結至課程。)

資料庫關係圖和資料模型的另一個差異是每個實體的其他 導覽屬性 區段。 實體的導覽屬性會參考相關實體。 例如, Courses 實體中的 Person 屬性包含與該 Person 實體相關的所有 Course 實體集合。

Image12

不過,資料庫和資料模型之間還有另一個差異,在於資料庫中沒有 CourseInstructor 用來連結 Person 多對多關聯性中 和 Course 資料表的關聯資料表。 導覽屬性可讓您從 Person 實體取得相關 CoursePerson 實體和實體的相關實體 Course ,因此不需要在資料模型中代表關聯資料表。

Image11

為了本教學課程的目的,假設 FirstName 資料表的資料 Person 行實際上同時包含人員的名字和中間名。 您想要變更功能變數名稱以反映此情況,但資料庫管理員 (DBA) 可能不想變更資料庫。 您可以在資料模型中變更屬性的名稱 FirstName ,同時讓資料庫維持不變。

在設計工具中,以滑鼠右鍵按一下實體中的 PersonFirstName,然後選取 [重新命名]。

Image13

輸入新名稱 「FirstMidName」。 這會變更您在程式碼中參考資料行的方式,而不需變更資料庫。

Image29

模型瀏覽器提供另一種方式來檢視資料庫結構、資料模型結構,以及它們之間的對應。 若要查看它,請以滑鼠右鍵按一下實體設計工具中的空白區域,然後按一下 [模型瀏覽器]。

Image18

[ 模型瀏覽器] 窗格會顯示樹狀檢視。 ([模型瀏覽器] 窗格可能會停駐方案總管窗格。) SchoolModel節點代表資料模型結構,而 SchoolModel.Store節點代表資料庫結構。

Image26

展開 SchoolModel.Store 以查看資料表、展開 [ 資料表/ 檢 視表] 以查看資料表,然後展開 [Course ] 以查看資料表中的資料行。

Image19

依序展開 [SchoolModel]、[ 實體類型] 和 [ Course] 節點,以查看實體內的實體和屬性。

Image20

在設計工具或 模型瀏覽器 窗格中,您可以看到 Entity Framework 如何關聯兩個模型的物件。 以滑鼠右鍵按一下實體, Person 然後選取 [ 資料表對應]。

Image21

這會開啟 [ 對應詳細資料 ] 視窗。 請注意,此視窗可讓您看到資料庫資料行 FirstName 對應至 FirstMidName ,這是您在資料模型中將它重新命名為的內容。

Image22

Entity Framework 會使用 XML 來儲存資料庫、資料模型及其之間的對應相關資訊。 SchoolModel.edmx檔案實際上是包含此資訊的 XML 檔案。 設計工具會以圖形化格式轉譯資訊,但您也可以以滑鼠右鍵按一下方案總管中的.edmx檔案,按一下 [開啟方式],然後選取[XML (Text) 編輯器] 來檢視檔案。 (資料模型設計工具與 XML 編輯器只是兩種不同的開啟和使用相同檔案的方式,因此您無法同時在 XML 編輯器中開啟並開啟檔案。)

您現在已建立網站、資料庫和資料模型。 在下一個逐步解說中,您將開始使用資料模型和資料 ASP.NET EntityDataSource 控制項。