亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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 世界不會遵循事件驅動編程模型。它遵循的是請求響應模型。終端用戶發出請求,然后服務器給出響應?!笷orm 標簽是 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 屬性的目的是什么

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美自拍视频在线观看| 91精品久久久久久久久久久久久| 亚洲国产另类久久精品| 欧美大成色www永久网站婷| 久久精品小视频| 欧美日韩xxx| 热门国产精品亚洲第一区在线| 国产精品视频免费观看www| 精品国产欧美一区二区五十路| 伊人男人综合视频网| 国产日本欧美视频| 国产精品亚洲第一区| 亚洲欧美日韩一区二区三区在线| 91精品国产九九九久久久亚洲| 亚洲人精选亚洲人成在线| 欧美激情极品视频| 国产aⅴ夜夜欢一区二区三区| 91精品久久久久久久久久久久久久| 亚洲精品欧美日韩| 亚洲毛片在线看| 日韩精品免费看| 国产精品美女久久久久久免费| 国产精品久久999| 亚洲一区二区三区香蕉| 一区二区三区视频在线| 伊人成人开心激情综合网| 亚洲小视频在线观看| 亚洲欧洲一区二区三区在线观看| 成人欧美一区二区三区在线| 亚洲老头同性xxxxx| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲精品国精品久久99热一| 日韩电影中文 亚洲精品乱码| 午夜精品久久久久久久99黑人| 久久久精品2019中文字幕神马| 欧美一级bbbbb性bbbb喷潮片| 自拍亚洲一区欧美另类| 欧美视频免费在线| 69久久夜色精品国产69| 日韩在线欧美在线| 91久久精品国产91性色| 日韩成人在线免费观看| 欧美日韩另类字幕中文| 97视频在线免费观看| 亚洲国产精品成人一区二区| 91久久久精品| 亚洲第一av网| 日韩av色在线| 亚洲第一中文字幕| 国产成人综合亚洲| 日本高清不卡的在线| 久久精视频免费在线久久完整在线看| 成人a在线视频| 国产一区视频在线播放| 亚洲性日韩精品一区二区| 亚洲欧美日韩一区二区三区在线| 欧美激情2020午夜免费观看| 日韩国产在线播放| 国产91免费观看| 国产成人久久精品| 亚洲福利精品在线| 国产丝袜一区二区| 青青草原一区二区| 国产精品男人的天堂| 欧美大片网站在线观看| 在线日韩欧美视频| 色吧影院999| 国产欧美在线视频| 97精品在线视频| 91亚洲精华国产精华| 国产91免费看片| 97在线看免费观看视频在线观看| 欧美国产视频一区二区| 国产精品va在线播放我和闺蜜| 97在线免费视频| 中文亚洲视频在线| 亚洲一区二区三区久久| 欧美日韩国产999| 国产主播喷水一区二区| 日韩成人在线观看| 亚洲电影在线观看| 国产成人拍精品视频午夜网站| 国产精品久久婷婷六月丁香| 日韩在线观看免费全集电视剧网站| 国产视频精品xxxx| 国产精品久久久久免费a∨大胸| 国产成+人+综合+亚洲欧洲| 国产精品网红福利| 激情懂色av一区av二区av| 日韩av黄色在线观看| 日韩精品亚洲视频| 91产国在线观看动作片喷水| 日本国产欧美一区二区三区| 国产黑人绿帽在线第一区| 在线成人一区二区| 欧美视频在线免费| 国产成人精品亚洲精品| 国内精品久久久久久中文字幕| 久久免费国产精品1| 国产免费一区二区三区香蕉精| 久久乐国产精品| 日本不卡免费高清视频| 欧美视频免费在线观看| 亚洲男人天堂古典| 亚洲日本成人女熟在线观看| 日韩欧美精品免费在线| 日韩精品在线第一页| 国产精品 欧美在线| 欧洲s码亚洲m码精品一区| 国产一区二区黑人欧美xxxx| 91高清免费视频| 2018中文字幕一区二区三区| 懂色av一区二区三区| 欧美在线视频免费| 国产精品99久久99久久久二8| 亚洲国产成人精品久久| 国产精品美女呻吟| www.日韩系列| 欧美精品videosex性欧美| 欧美视频国产精品| 亚洲香蕉av在线一区二区三区| 日韩电影中文 亚洲精品乱码| 久久精品一区中文字幕| 国产午夜精品美女视频明星a级| 91国内揄拍国内精品对白| 亚洲精品国产综合久久| 中文字幕在线观看日韩| 欧美电影在线观看网站| 久久色精品视频| 美女少妇精品视频| 日韩欧美在线看| 国产91在线播放精品91| 亚洲电影免费在线观看| 精品久久久久久久大神国产| 国产欧美 在线欧美| 欧美激情亚洲视频| 91免费精品国偷自产在线| 日韩高清中文字幕| 黑人极品videos精品欧美裸| 日韩电影免费在线观看| 91经典在线视频| 日韩免费在线视频| 欧美成人一区在线| 久久精品电影网| 国产精品视频免费观看www| 久久精品国产一区二区电影| 亚洲欧美色图片| 久久手机免费视频| 一区二区日韩精品| 3344国产精品免费看| 国产视频精品自拍| 国产在线不卡精品| 日本高清久久天堂| 亚洲精品美女视频| 精品久久久中文| 国产精品一区二区三区在线播放| 日韩欧美在线看| 亚洲欧美国内爽妇网| 日本乱人伦a精品| 中文字幕日韩专区| 久久精品视频在线播放| 欧美成人午夜激情视频| 国产99久久精品一区二区 夜夜躁日日躁| 国产精品久久久久9999|