1. 程式人生 > >MVC5+EF6 入門完整教程4 :EF基本的CRUD

MVC5+EF6 入門完整教程4 :EF基本的CRUD

上篇文章主要講了如何配置EF, 我們回顧下主要過程:

建立Data Model à 建立Database Context à建立databaseInitializerà配置entityFramework的context配置節。

對這個過程還有疑問的可以去上篇再看一下。

本次我們就主要講解 (1) EF基本的CRUD (2) 涉及到的常用HtmlHelper

文章提綱

概述 & 要點

理論基礎

詳細步驟

總結

概述 & 要點

下面是本文要點,正文部分會有詳細介紹。

  • EF資料模型的CRUD
  • 常用的HtmlHelper
  • Repository Pattern

理論基礎 -- EF 三種程式設計方式 (略)

總共有三種方式:

Database First,Model First和Code First,我們採用的是code first.

這方面資料很多,我就不重複講述了, 需要了解這三者差異和應用場景的請自行查閱其他資料。

理論基礎 -- EF CRUD

針對之前建立的SysUser, SysRole, SysUserRole舉一些典型例子,基本的CRUD大家在使用時模仿這些例子就可以了。

我們要用的資料庫示例資料分別如下:    

SysUser

SysRole

SysUserRole

EF資料查詢

先講使用頻率最高的查詢部分。     

EF資料查詢用LINQ實現(LINQ to Entities),通常有表示式和函式式兩種方式。建議用函式式方式,比較簡單。

假設我們已經定義好了context

private AccountContext db = new AccountContext();

  1. [基本查詢] 查詢所有的SysUser

    var users = from u in db.SysUsers

    select u; //表示式方式

users = db.SysUsers; //函式式方式

  1. [條件查詢] 加入查詢條件

    users = from u in db.SysUsers

    where u.UserName == "Tom"

    select u; //表示式方式

    users = db.SysUsers.Where(u => u.UserName == "Tom");

 //函式式方式

    NOTE 注意這邊等號是C#寫法 : " == "

  1. [排序和分頁查詢]

    users = (from u in db.SysUsers

    orderby u.UserName

    select u).Skip(0).Take(5); //表示式方式

    users = db.SysUsers.OrderBy(u => u.UserName).Skip(0).Take(5); //函式式方式

    NOTE 只有排序了才能分頁

  1. [聚合查詢]

    //查user總數

    var num = db.SysUsers.Count();

    //查最小ID

 minId = db.SysUsers.Min(u => u.ID);

    NOTE 聚合查詢只能通過函式式查詢

  1. [連線查詢]

    var users = from ur in db. SysUserRoles

    join u in db. SysUsers

    on ur.SysUserID equals u.ID

 ur;

NOTE

大家注意,連線查詢返回的結果還是一個型別為SysUserRoles的集合,只是用

了內連線進行了的篩選。

那麼問題來了,如果我需要選擇一個集合,裡面包括多張表,如SysUser裡面的UserName和SysRole裡面的RoleName怎麼辦?

這個是通過navigation property來實現的, 前面新建model的時候提到過,例如SysUser裡面的

public virtual ICollection<SysUserRole> SysUserRoles { getset; }

但這種做法還是不是太靈活,具體做法我們在下面的詳細步驟裡面講。

EF資料更新

UPDATE步驟比較清晰,直接看下面程式碼。

//資料更新,分三步:找到物件--> 更新物件資料--> 儲存更改

public ActionResult EFUpdateDemo()

{

//1.找到物件

var sysUser = db.SysUsers.FirstOrDefault(u => u.UserName == "Tom");

//2.更新物件資料

if (sysUser != null)

{

sysUser.UserName = "Tom2";

}

//3.儲存修改

db.SaveChanges();

return View();

}

EF資料新增/刪除

與UPDATE類似。

//資料新增和刪除

public ActionResult EFAddOrDeleteDemo()

{

//新增

//1.建立新的實體

var newSysUser = new SysUser()

{

UserName = "Scott",

Password = "tiger",

Email = "[email protected]"

};

//2.增加

db.SysUsers.Add(newSysUser);

//3.儲存修改

db.SaveChanges();

//刪除

//1.找到需要刪除的物件

var delSysUser = db.SysUsers.FirstOrDefault(u => u.UserName == "Scott");

//2.刪除

if (delSysUser!=null)

{

db.SysUsers.Remove(delSysUser);

}

//3.儲存修改

db.SaveChanges();

return View("EFQueryDemo");

}

詳細步驟

  • 查詢使用者及相應角色的功能
  • 修改使用者
  • 增加使用者和刪除使用者

查詢使用者及相應的角色

  1. 在Controller中修改Index方法,新增相關View, 顯示所有使用者
    1. 將model作為引數傳過去

    2. Views à Account à Index.cshtml 頂部新增強型別宣告,

      @model IEnumerable<MVCDemo.Models.SysUser>

      body中添加個table用來顯示資料

      NOTE

      @Html.ActionLink("Details""Details"new { id = item.ID })生成一個相同controller下的路由地址。

      顯示結果

  2. 增加一個Details方法,新增相關View, 顯示相應使用者及對應的角色
    1. 將特定的model傳過去

    2. Views à Account à Index.cshtml 頂部新增強型別宣告

      @model MVCDemo.Models.SysUser

      顯示資料,注意方框部分如何導航到另外一張表的資訊中。

      顯示結果

更新使用者,增加使用者,刪除使用者

這三個操作都類似,屬於更新的範疇,我們放在一起來講。

  1. 修改Views à Account à Index.cshtml

    開頭增加Create連結。

    table每條記錄後面增加Edit,Delete連結。

  2. 在Controller中增加相應的方法。

    新建使用者:

//新建使用者

public ActionResult Create()

{

return View();

}

[HttpPost]

public ActionResult Create(SysUser sysUser)

{

db.SysUsers.Add(sysUser);

db.SaveChanges();

return RedirectToAction("Index");

}

修改使用者:

//修改使用者

public ActionResult Edit(int id)

{

SysUser sysUser = db.SysUsers.Find(id);

return View(sysUser);

}

[HttpPost]

public ActionResult Edit(SysUser sysUser)

{

db.Entry(sysUser).State = EntityState.Modified;

db.SaveChanges();

return RedirectToAction("Index");

}

刪除使用者:

//刪除使用者

public ActionResult Delete(int id)

{

SysUser sysUser = db.SysUsers.Find(id);

return View(sysUser);

}

[HttpPostActionName("Delete")]

public ActionResult DeleteConfirmed(int id)

{

SysUser sysUser = db.SysUsers.Find(id);

db.SysUsers.Remove(sysUser);

db.SaveChanges();

return RedirectToAction("Index");

}

NOTE

涉及到資料更新的地方都有兩個同名的方法過載,一個用來顯示[HttpGet],一個用來資料更新[HttpPost]

  1. 在右鍵方法名,生成相應的View

    每個View的頂部需要新增一個宣告

    @model MVCDemo.Models.SysUser

    各個view的body中具體程式碼:

    Create.cshtml

<body>

<div>

<h2>Create</h2>

@using (Html.BeginForm())

{

<div>

@Html.LabelFor(model => model.UserName)

@Html.EditorFor(model => model.UserName)

</div>

<div>

@Html.LabelFor(model => model.Email)

@Html.EditorFor(model => model.Email)

</div>

<div>

@Html.LabelFor(model => model.Password)

@Html.PasswordFor(model => model.Password)

</div>

<div>

<input type="submit" value="Create" />

</div>

}

<div>@Html.ActionLink("Back to List","Index")</div>

</div>

</body>

Edit.cshtml

<body>

<div>

<h2>Edit</h2>

@using (Html.BeginForm())

{

@Html.HiddenFor(model => model.ID)

<div>

@Html.LabelFor(model => model.UserName)

相關推薦

MVC5+EF6 入門完整教程4 EF基本CRUD

上篇文章主要講了如何配置EF, 我們回顧下主要過程:建立Data Model à 建立Database Context à建立databaseInitializerà配置entityFramework的context配置節。對這個過程還有疑問的可以去上篇再看一下。本次我們就主

MVC5+EF6 入門完整教程6 分部檢視(Partial View)

Partial/RenderPartial和Action/RenderAction的引數分別是 partialView和 Action的名字。當然還有其他的過載函式,我們只說最常用的。應用時可以按照我們前面舉的例子。

MVC5+EF6 入門完整教程2 從前端UI開始

從前端的UI開始MVC分離的比較好,開發順序沒有特別要求,先開發哪一部分都可以,這次我們主要講解前端UI的部分。ASP.NET MVC拋棄了WebForm的一些特有的習慣,例如伺服器端控制元件,ViewState這些東西,讓Web迴歸原始的狀態,Web是什麼樣子就是什麼樣子。

MVC5+EF6 入門完整教程

taf bag details 視圖 clu role pre 階段 驗證 前一陣子臨時有事,這篇文章發布間隔比較長,我們先回顧下之前的內容,每篇文章用一句話總結重點。 文章一 MVC核心概念簡介,一個基本MVC項目結構 文章二 通過開發一個最基本的登錄界面,介紹了如何從C

MVC5+EF6 入門完整教程12--靈活控制Action權限

全局 基本功 -1 str 條件 context tac 完整 suse 大家久等了。 本篇專題主要講述MVC中的權限方案。 權限控制是每個系統都必須解決的問題,也是園子裏討論最多的專題之一。 前面的系列文章中我們用到了 SysUser, SysRole, SysUserR

MVC5+EF6 入門完整教程

好的 ring 改變 替換 使用 需要 註釋 mod num 本篇我們針對表格顯示添加一些新功能。 前面我們已經講解過表格顯示數據了,現在我們添加三個常用功能: 對顯示結果進行排序、過濾、分頁。 文章提綱 理論基礎/前置準備 詳細步驟 總結 前置準備 – 應

MVC5+EF6 入門完整教程

crud 新建 用戶角色 tro mic acc where shtml pos 本篇是第一階段的完結篇。 學完這篇後,你應該可以利用MVC進行完整項目的開發了。 本篇主要講述多表關聯數據的更新,以及如何使用原生SQL。 文章提綱 多表關聯數據更新 如何使用原生SQ

MVC5 + EF6 入門完整教程

第0課 從0開始 ASP.NET MVC開發模式和傳統的WebForm開發模式相比,增加了很多"約定"。 直接講這些 "約定" 會讓人困惑,而且東西太多容易忘記。 和微軟官方教程不同,筆者儘量不用腳手架,從空白框架開始,一步一步新增功能,每次新增的東西剛好夠用,讓大

MVC5+EF6 入門完整教程

本篇是相對獨立的一篇,主要講解不丟失資料進行資料庫結構升級。 前面我們講解EF功能時(見第三篇文章)已經介紹過一種更新資料庫的方式: EF比較model和database,如果兩邊不一致,程式將會drop and re-create資料庫。 本篇文章我們會使用 co

MVC5 + EF6 入門完整教程

上篇文章主要講了如何配置EF, 我們回顧下主要過程: 建立Data Model à 建立Database Context à建立databaseInitializerà配置entityFramework的context配置節。 對這個過程還有疑問的可以去上篇再看一下。 本次我們就主要講解 (1)

MVC5+EF6 入門完整教程11--細說MVC中倉儲模式的應用

http://www.cnblogs.com/miro/p/4806199.html 摘要: 第一階段1~10篇已經覆蓋了MVC開發必要的基本知識。 第二階段11~20篇將會側重於專題的講解,一篇文章解決一個實際問題。 根據園友的反饋, 本篇文章將會先對呼聲最高

MVC5+EF6 入門完整教程

上篇文章介紹了EF實現CRUD及一些基本的Html Helpers. 這次我們將會對之前的內容進行一些修改和重構: 引入Bootstrap樣式,搭建幾類共用的模板頁,對UI進行一些改造 分類介紹Html Helpers 完善一些功能 文章提綱 理論基礎

MVC5+EF6 入門完整教程12--靈活控制Action許可權

大家久等了。 本篇專題主要講述MVC中的許可權方案。 許可權控制是每個系統都必須解決的問題,也是園子裡討論最多的專題之一。 前面的系列文章中我們用到了 SysUser, SysRole, SysUserRole 這幾個示例表。 我們以此為基礎,完成RBAC (基於角

MVC 5 + EF6 入門完整教程14 -- 動態生成面包屑導航

maps setting i++ log item 文檔 應該 動態生成 內容 上篇文章我們完成了 動態生成多級菜單 這個實用組件。 本篇文章我們要開發另一個實用組件:面包屑導航。 面包屑導航(BreadcrumbNavigation)這個概念來自童話故事"漢賽爾和格萊特"

ASP.NET + MVC5 入門完整教程三 (上) ---第一個MVC專案

                                第一個MVC應用程式1建立MVC專案開啟VS ,File--新建--專案,選擇ASP Web專案,命名後確認。選擇(Empty)空模板,專案建立完成,會看到 解決方案管理器 視窗顯示一些資料夾,如圖,這是一個MV

node.js零基礎詳細教程(4)node.js事件機制、node異步IO操作

nod server nbsp node i++ 兩個 con 錯誤 定時器 第四章 建議學習時間3小時 課程共10章 學習方式:詳細閱讀,並手動實現相關代碼 學習目標:此教程將教會大家 安裝Node、搭建服務器、express、mysql、mongodb、編寫後臺業務邏

MVC5+EF6入門記(二)

key 元素 action 地址 登錄ui acc 場景 stact name 貓和你都歸我 2017/10/01 17:00:29 今天學習了第二課的內容,下面是我總結的知識點,希望會有所幫助,也希望多多指導!一、對專業名詞的解釋Action Method Selec

tensorflow基本教程4placeholder

import tensorflow as tf input1=tf.placeholder(tf.float32) input2=tf.placeholder(tf.float32) output=tf.multiply(input1,input2)#tensorflow中1.1版本mu

易學筆記-RabbitMQ教程4選擇性接收訊息(路由器型別為direct)

易學筆記 十年IT經驗個人學習筆記分享: 開發語言:C/C++/JAVA/PYTHON/GO/JSP WEB架構:Servlets/springMVC/springBoot/springClound 容器架構:Docker容器/Docker叢集/Docker與微服務整合/

Word2003入門動畫教程25新增或改變Word頁面邊框

Word2003是微軟公司提供的一款文書處理軟體,可以對文字進行排版和編輯、分段等各種處理,最終將編輯好的內容打印出來,是辦公室一族中必備的辦公軟體之一。我們在製作文件的時候,有時候為了達到某種視覺效果,我們會給文件新增一種邊框做以修飾,具體怎麼操作呢?就讓Word聯盟為大家