麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

7 天玩轉 ASP.NET MVC — 第 3 天

2019-11-17 02:13:15
字體:
來源:轉載
供稿:網友

7 天玩轉 asp.net MVC — 第 3 天

目錄

  • 第 1 天
  • 第 2 天
  • 第 3 天
  • 第 4 天
  • 第 5 天
  • 第 6 天
  • 第 7 天

0. 前言

我們假定你在開始學習時已經閱讀了前兩天的學習內容。在第 2 天我們完成了關于顯示 Employees 列表的項目。

在第三天,我們將會通過介紹數據訪問層和數據入口將它升級到一個新的層次。

1. 數據訪問層

在真實場景的項目中,如果沒有 Database,那么這個項目是未完成的。在我們的項目中,我們還沒有談到數據庫。第三天的首個 Lab 將會學習數據庫和數據庫層。

這里我們將使用 SQL Server 和 Entity Framework 來創建 Database 和 Database 訪問層。

簡單來說,什么是 Entity Framework?

這是一個 ORM 工具。ORM 代表的是 Object Relational Mapping。即:對象關系映射。

在 RDBMS 領域中,我們所談論的 Tables 表格和 Columns 列的這些方面,在 .NET 領域(面向對象領域)中被稱為 Classes 類,對象和屬性。

當我們思考任何有關數據驅動應用的方式時,都可以得出以下兩種方式:

  • 書寫代碼來和數據庫打交道(被稱為數據訪問層和數據庫邏輯)

  • 書寫代碼來將數據庫數據映射到面向對象中,反之亦然。

ORM 是一個工具,可以自動做如上兩件事。Entity Framework 是微軟的 ORM 工具。

什么是 Code First 方法?

在 Entity Framework 中,我們可以使用如下三種的任意方法:

  • Database First 方法。創建一個有表,列和關系的數據庫。Entity Framework 將會生成對應的 Model 類(業務實體)和數據訪問層代碼。

  • Model First 方法。在這個方法中,Model 類和它們之間的聯系將會被 Model 設計者在 Visual Studio 中被手動定義。然后 Entity Framework 會自動創建數據訪問層和擁有表、列以及關系的數據庫。

  • Code First 方法。在這個方法中,手動創建 POCO 類。這些類中的關系將會被代碼所定義。當應用第一次執行時,Entity Framework 將會自動在數據庫服務器上創建數據訪問層和擁有表、列以及關系的數據庫。

什么是 POCO 類?

POCO 代表的是「Plain Old CLR Objects」。POCO 類代表的是我們所創建的簡單 .NET 類。在我們之前的例子中, Employee 類是一個簡單的 POCO。

2. Lab 8 — 向項目中添加數據訪問層

第一步:創建數據庫

連接 SQL Server 然后創建一個新的數據庫,命名為「SalesERPDB」。

7 天玩轉 ASP.NET MVC — 第 3 天

第二步:創建 ConnectionString

打開 Web.config 文件,然后在 Configuration 區域內添加如下片段:

<connectionStrings>  <add connectionString="Data Source=(local);Initial Catalog=SalesERPDB;Integrated Security=True"          name="SalesERPDAL"               

第三步:添加 Entity Framework 引用

右擊項目-> 管理 Nuget 包。搜索 Entity Framework,然后點擊安裝。

7 天玩轉 ASP.NET MVC — 第 3 天

第四步:創建數據訪問層

public class SalesERPDAL: DbContext  {}

第五步:為 Employee 類創建主鍵

打開 Employee 類并在類頂部聲明如下:

using System.ComponentModel.DataAnnotations;  

在 Employee 類中添加 EmployeeId 屬性,然后將其標注為 Key 屬性。

public class Employee  {    [Key]    public int EmployeeId  { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }    public int Salary { get; set; }}

第六步:定義映射

在「SalesERPDAL」類中添加如下聲明語句:

using Webapplication1.Models;

在 SalesERPDAL 類中重寫 OnModelCreating 方法。

protected override void OnModelCreating(DbModelBuilder modelBuilder)  {    modelBuilder.Entity<employee>().ToTable("TblEmployee");    base.OnModelCreating(modelBuilder);}

注意:上述代碼中的片段「TblEmployee」代表的是表名。在運行時講自動被創建。

第七步:在數據庫中創建 Employees 屬性

在「SalesERPDAL」類中創建一個新屬性,命名為 Employee,如下所示:

public DbSet<employee> Employees{get;set;}

DbSet 將會展示所有可以在數據庫中查詢到的 Employees。

第八步:改變業務層代碼,從數據庫中讀取數據

打開 EmployeeBusinessLayer 類,在頂部加上聲明如下:

using WebApplication1.DataAccessLayer;  

現在改變 GetEmployees 方法如下:

public List<employee> GetEmployees()  {    SalesERPDAL salesDal = new SalesERPDAL();    return salesDal.Employees.ToList();}

第九步:執行并測試

按下 F5,并執行應用。

7 天玩轉 ASP.NET MVC — 第 3 天

現在的數據庫中,我們沒有任何的 Employees,所以我們看見的是一個空白的 Grid。

查看數據庫,現在我們可以在 TblEmployee 表中看到所有的列。

7 天玩轉 ASP.NET MVC — 第 3 天

第十步:插入測試數據

向 TblEmployee 表中插入一些測試數據。

7 天玩轉 ASP.NET MVC — 第 3 天

第十一步:執行并測試應用

按下 F5 并再次運行應用。

7 天玩轉 ASP.NET MVC — 第 3 天

Lab 8 的 Q&A

什么是 DbSet?

DbSet 簡單地表示了可以從數據庫中查詢到的實體集合。當我們再次寫一個 Linq 查詢時,DbSet 對象會對查詢進行內存轉換,然后觸發數據庫。

在我們的例子中,「Employee」是一個 DbSet,它承載了所有可以從數據庫中查詢到的 Employee 實體對象。每一次我們嘗試訪問「Employees」時,它都將從“TblEmployee”表中獲取記錄,然后將其轉換為「Employees」對象并返回集合。

數據庫連接串和數據訪問層是如何連接的?

Mapping 通過名稱來實現。在我們的例子中,ConnectionString 名稱和數據訪問層類的名稱是一樣的,即「SalesERPDAL」,因此它們是自動映射的。

我們可以更改 ConnectionString 的名稱嗎?

答案是肯定的。在這個例子中,我們需要在數據訪問層類中定義一個構造函數如下:

public SalesERPDAL():base("NewName")  {}

3. 組織所有

我們需要做幾個改變,使得所有是有組織和有意義的。

第一步:重命名

  • 「TestController」換名為 「EmployeeController」。

  • GetView 行為方法改為 Index。

  • Test 文件夾(Views 文件夾下) 改為 Employee

  • 「MyView」視圖改為「Index」。

第二步:從 EmployeeListViewModel 中刪除 UserName 屬性

第三步:從視圖中刪除 UserName

打開 View/Employee.Index.cshtml 視圖,然后從中刪除 UserName。

簡單來說,就是刪除如下代碼:

Hello @Model.UserName  <hr />  

第四步:在 EmployeeController 中更改 Index 行為方法

更改 EmployeeController 中的 Index 行為方法如下:

public ActionResult Index()  {    &hellip;&hellip;    &hellip;&hellip;    &hellip;&hellip;    employeeListViewModel.Employees = empViewModels;    //employeeListViewModel.UserName = "Admin";-->Remove this line -->Change1    return View("Index", employeeListViewModel);//-->Change View Name -->Change 2}

現在執行的 URL 將會為:「…/Employee/Index」。

4. Lab 9 — 創建 Data Entry Screen

第一步:創建 Action 方法

在 EmployeeController 中創建一個 Action 方法,命名為「AddNew」,如下:

public ActionResult AddNew()  {    return View("CreateEmployee");}

第二步:創建 View

在文件夾 View/Employee 下創建一個 View,命名為「CreateEmployee」。代碼如下:

@{    Layout = null;}<!DOCTYPE html>  <html>      <head>      <meta name="viewport" content="width=device-width" />      <title>CreateEmployee</title>    </head>    <body>      <div>         <form action="/Employee/SaveEmployee" method="post">            First Name: <input type="text" id="TxtFName" name="FirstName" value="" /><br />            Last Name: <input type="text" id="TxtLName" name="LastName" value="" /><br />            Salary: <input type="text" id="TxtSalary" name="Salary" value="" /><br />            <input type="submit" name="BtnSave" value="Save Employee" />            <input type="button" name="BtnReset" value="Reset" />         </form>      </div>    </body></html>  

第三步:在 Index 視圖中創建一個鏈接

打開 Index.cshtml,然后增加一個超鏈接指向 AddNew 行為的URL。

<ahref="/Employee/AddNew">Add New</a>  

第四步:執行并測試應用

按下 F5 并執行應用。

7 天玩轉 ASP.NET MVC — 第 3 天

Lab 9 的 Q&A

Form 標簽的目的是什么?

在第一天的系列學習中,我們已經明白了「Web 世界不會遵循事件驅動編程模型。它遵循的是請求響應模型。終端用戶發出請求,然后服務器給出響應。」Form 標簽是 HTML 中做出響應的其中一種方式。只要標簽里的提交按鈕被點擊,一個請求就將發送給動作屬性中指定的 URL 中。

Form 標簽中的方法屬性是什么?

它決定了請求的類型。請求也許是如下的其中一種:get、post、put 或者是 delete。

  • Get:當我們想獲取什么數據時

  • Post:當我們想創建什么數據時

  • Put:當我們想更新什么數據時

  • Delete:當我們想刪除什么數據時

運用 Form 標簽和通過瀏覽器地址欄或者超鏈接來發出請求,有何區別?

當我們使用 Form 標簽來發送請求時,所有輸入控件中的值都會伴隨著請求一起被處理。

Checkbox、Radio 按鈕和 Dropdowns 控件中的值也會被發送嗎?

答案是肯定的。所有輸入控件(輸入類型為 Text,Radio,Checkbox)以及 Dropdowns(表示的是被選中的元素)都會被發送。

輸入的值如何發送給服務器?

當請求的類型是 Get、Put 或者 Delete 時,輸入的值會以查詢字符串參數的方式發送。

當請求的類型是 Post 時,輸入的值會以 Post 數據發送。

輸入控件中的 Name 屬性的目的是什么

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美黄色免费视频 | 午夜视频在线看 | 爱逼爱操综合网 | 亚洲一区在线视频观看 | 午夜视频免费在线观看 | 91在线色| 欧美视频在线一区二区三区 | 羞羞色在线观看 | 久久久久久久高清 | 大西瓜永久免费av在线 | 青草久久久久 | 亚洲免费视| 国产精品av久久久久久网址 | 色交视频| 国产一精品久久99无吗一高潮 | 国产一区二区不卡 | 国产大片中文字幕在线观看 | 色视频在线 | 久久欧美亚洲另类专区91大神 | 日韩在线毛片 | 一级电影在线观看 | 日日狠狠久久 | 国产福利不卡一区二区三区 | 毛片免费在线播放 | 国产午夜亚洲精品理论片大丰影院 | 免费一级毛片免费播放 | 在线 日本 制服 中文 欧美 | 中文字幕精品在线视频 | 91精品一区二区综合在线 | 国产一级桃视频播放 | 国产又粗又爽又深的免费视频 | 亚洲人片在线观看 | 91免费视频版| 久久精品国产99国产精品亚洲 | 91av大片 | 美女网站色免费 | 一区二区三区在线观看免费视频 | 国产三级三级三级三级 | 久久爽精品区穿丝袜 | 久久精品中文字幕一区 | 色婷婷久久一区二区 |