MVC5 + EF6 入門完整教程 四
上篇文章主要講了如何配置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
privateAccountContext db =newAccountContext();
- [基本查詢] 查詢所有的SysUser
- var users =from uin db.SysUsers
- ct u;//表示式方式
- users = db.SysUsers;//函式式方式
var users =from uin db.SysUsers select u;//表示式方式 users = db.SysUsers;//函式式方式
- [條件查詢] 加入查詢條件
- users =from uin db.SysUsers
- where u.UserName =="Tom"
- select u;//表示式方式
- users = db.SysUsers.Where(u => u.UserName =="Tom");//函式式方式
users =from uin db.SysUsers
where u.UserName =="Tom"
select u;//表示式方式
users = db.SysUsers.Where(u => u.UserName =="Tom");//函式式方式
NOTE 注意這邊等號是C#寫法 :" =="
- [排序和分頁查詢]
- users = (from uin db.SysUsers
- orderby u.UserName
- select u).Skip(0).Take(5);//表示式方式
- users = db.SysUsers.OrderBy(u => u.UserName).Skip(0).Take(5);//函式式方式
users = (from uin db.SysUsers
orderby u.UserName
select u).Skip(0).Take(5);//表示式方式
users = db.SysUsers.OrderBy(u => u.UserName).Skip(0).Take(5);//函式式方式
NOTE 只有排序了才能分頁
- [聚合查詢]
- //查user總數
- var num = db.SysUsers.Count();
- //查最小ID
- var minId = db.SysUsers.Min(u => u.ID);
//查user總數
var num = db.SysUsers.Count();
//查最小ID
var minId = db.SysUsers.Min(u => u.ID);
NOTE 聚合查詢只能通過函式式查詢
- [連線查詢]
- var users =from urin db. SysUserRoles
- join uin db. SysUsers
- on ur.SysUserIDequals u.ID
- elect ur;
var users =from urin db. SysUserRoles
join uin db. SysUsers
on ur.SysUserIDequals u.ID
select ur;
NOTE
大家注意,連線查詢返回的結果還是一個型別為SysUserRoles的集合,只是用了內連線進行了的篩選。
那麼問題來了,如果我需要選擇一個集合,裡面包括多張表,如SysUser裡面的UserName和SysRole裡面的RoleName怎麼辦?
這個是通過navigation property來實現的, 前面新建model的時候提到過,例如SysUser裡面的
publicvirtualICollection<SysUserRole> SysUserRoles {get;set; }
但這種做法還是不是太靈活,具體做法我們在下面的詳細步驟裡面講。
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();
- }
//資料更新,分三步:找到物件--> 更新物件資料--> 儲存更改
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類似。
[csharp] view plain copy print?- //資料新增和刪除
- publicActionResult EFAddOrDeleteDemo()
- {
- //新增
- //1.建立新的實體
- var newSysUser =newSysUser()
- {
- 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");
- }
//資料新增和刪除
publicActionResult EFAddOrDeleteDemo()
{
//新增
//1.建立新的實體
var newSysUser =newSysUser()
{
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");
}
詳細步驟
- 查詢使用者及相應角色的功能
- 修改使用者
- 增加使用者和刪除使用者
查詢使用者及相應的角色
-
在Controller中修改Index方法,新增相關View, 顯示所有使用者
- 將model作為引數傳過去
-
Viewsà Accountà
Index.cshtml 頂部新增強型別宣告,
@modelIEnumerable<MVCDemo.Models.SysUser>
body中添加個table用來顯示資料
NOTE
@Html.ActionLink("Details","Details",new { id = item.ID })生成一個相同controller下的路由地址。
顯示結果
-
增加一個Details方法,新增相關View, 顯示相應使用者及對應的角色
- 將特定的model傳過去
-
Viewsà Accountà
Index.cshtml 頂部新增強型別宣告
@modelMVCDemo.Models.SysUser
顯示資料,注意方框部分如何導航到另外一張表的資訊中。
顯示結果
更新使用者,增加使用者,刪除使用者
這三個操作都類似,屬於更新的範疇,我們放在一起來講。
-
修改Viewsà Accountà
Index.cshtml
開頭增加Create連結。
table每條記錄後面增加Edit,Delete連結。
-
在Controller中增加相應的方法。
新建使用者:
- //新建使用者
- public ActionResult Create()
- {
- return View();
- }
- [HttpPost]
- public ActionResult Create(SysUser sysUser)
- {
- db.SysUsers.Add(sysUser);
- db.SaveChanges();
- return RedirectToAction("Index");
- }
//新建使用者
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Create(SysUser sysUser)
{
db.SysUsers.Add(sysUser);
db.SaveChanges();
return RedirectToAction("Index");
}
修改使用者:
[csharp] view plain copy print?- //修改使用者
- 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 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");
}
刪除使用者:
[csharp] view plain copy print?- //刪除使用者
- public ActionResult Delete(int id)
- {
- SysUser sysUser = db.SysUsers.Find(id);
- return View(sysUser);
- }
- [HttpPost,ActionName("Delete")]
- public ActionResult DeleteConfirmed(int id)
- {
- SysUser sysUser = db.SysUsers.Find(id);
- db.SysUsers.Remove(sysUser);
- db.SaveChanges();
- return RedirectToAction("Index");
- }
//刪除使用者
public ActionResult Delete(int id)
{
SysUser sysUser = db.SysUsers.Find(id);
return View(sysUser);
}
[HttpPost,ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
SysUser sysUser = db.SysUsers.Find(id);
db.SysUsers.Remove(sysUser);
db.SaveChanges();
return RedirectToAction("Index");
}
NOTE
涉及到資料更新的地方都有兩個同名的方法過載,一個用來顯示[HttpGet],一個用來資料更新[HttpPost]
-
在右鍵方法名,生成相應的View
每個View的頂部需要新增一個宣告
@modelMVCDemo.Models.SysUser
各個view的body中具體程式碼:
Create.cshtm
- <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>
- <inputtypeinputtype ="submit"value="Create"/>
- </div>
- }
- <div>@Html.ActionLink("Back to List", "Index")</div>
- </div>
- </body>
<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>
<inputtype ="submit" value="Create" />
</div>
}
<div>@Html.ActionLink("Back to List", "Index")</div>
</div>
</body>
Edit.cshtml
[html] view plain copy print?- <body>
- <div>
- <h2>Edit</h2>
- @using (Html.BeginForm())
- {
- @Html.HiddenFor(model => model.ID)
- <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>
- <inputtypeinputtype ="submit"value="Save"/>
- </div>
- }
- <div>@Html.ActionLink("Back to List", "Index")</div>
- </div>
- </body>
<body>
<div>
<h2>Edit</h2>
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.ID)
<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>
<inputtype ="submit" value="Save" />
</div>
}
<div>@Html.ActionLink("Back to List", "Index")</div>
</div>
</body>
Delete.cshtml
[html] view plain copy print?- <body>
- <div>
- <h2>Delete</h2>
- <h3>Are you sure you want to delete this?</h3>
- <h4>User</h4>
- <dl>
- <dt>@Html.DisplayNameFor(model => model.UserName)</dt>
- <dd>@Html.DisplayFor(model => model.UserName)</dd>
- <dt>@Html.DisplayNameFor(model => model.Email)</dt>
- <dd>@Html.DisplayFor(model => model.Email)</dd>
- </dl>
- @using (Html.BeginForm())
- {
- <div>
- <inputtypeinputtype ="submit"value="Delete"/>
- </div>
- }
- <div>
- @Html.ActionLink("Back to List", "Index")
- </div>
- </div>
- </body>
<body>
<div>
<h2>Delete</h2>
<h3>Are you sure you want to delete this?</h3>
<h4>User</h4>
<dl>
<dt>@Html.DisplayNameFor(model => model.UserName)</dt>
<dd>@Html.DisplayFor(model => model.UserName)</dd>
<dt>@Html.DisplayNameFor(model => model.Email)</dt>
<dd>@Html.DisplayFor(model => model.Email)</dd>
</dl>
@using (Html.BeginForm())
{
<div>
<inputtype ="submit" value="Delete" />
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
</div>
</body>
NOTE
針對上面這些程式碼,我們提一下其中用到的HtmlHelper, 主要有這麼幾個:
DisplayNameFor (model=>model.xxx)à 生成純文字,顯示xxx列名
DisplayFor (model=>model.xxx)à 生成純文字,顯示xxx列的內容
LableFor à 生成一個Lable標籤
EditorFor
上篇文章主要講了如何配置EF, 我們回顧下主要過程:
建立Data Model
à 建立Database Context à建立databaseInitializerà配置entityFramework的context配置節。
對這個過程還有疑問的可以去上篇再看一下。
本次我們就主要講解 (1) taf bag details 視圖 clu role pre 階段 驗證 前一陣子臨時有事,這篇文章發布間隔比較長,我們先回顧下之前的內容,每篇文章用一句話總結重點。
文章一 MVC核心概念簡介,一個基本MVC項目結構
文章二 通過開發一個最基本的登錄界面,介紹了如何從C 全局 基本功 -1 str 條件 context tac 完整 suse 大家久等了。
本篇專題主要講述MVC中的權限方案。
權限控制是每個系統都必須解決的問題,也是園子裏討論最多的專題之一。
前面的系列文章中我們用到了 SysUser, SysRole, SysUserR 好的 ring 改變 替換 使用 需要 註釋 mod num 本篇我們針對表格顯示添加一些新功能。
前面我們已經講解過表格顯示數據了,現在我們添加三個常用功能:
對顯示結果進行排序、過濾、分頁。
文章提綱
理論基礎/前置準備
詳細步驟
總結
前置準備 – 應 crud 新建 用戶角色 tro mic acc where shtml pos 本篇是第一階段的完結篇。
學完這篇後,你應該可以利用MVC進行完整項目的開發了。
本篇主要講述多表關聯數據的更新,以及如何使用原生SQL。
文章提綱
多表關聯數據更新
如何使用原生SQ
上篇文章主要講了如何配置EF, 我們回顧下主要過程:建立Data Model à 建立Database Context à建立databaseInitializerà配置entityFramework的context配置節。對這個過程還有疑問的可以去上篇再看一下。本次我們就主
第0課 從0開始
ASP.NET MVC開發模式和傳統的WebForm開發模式相比,增加了很多"約定"。
直接講這些 "約定" 會讓人困惑,而且東西太多容易忘記。
和微軟官方教程不同,筆者儘量不用腳手架,從空白框架開始,一步一步新增功能,每次新增的東西剛好夠用,讓大
本篇是相對獨立的一篇,主要講解不丟失資料進行資料庫結構升級。
前面我們講解EF功能時(見第三篇文章)已經介紹過一種更新資料庫的方式:
EF比較model和database,如果兩邊不一致,程式將會drop and re-create資料庫。
本篇文章我們會使用 co Partial/RenderPartial和Action/RenderAction的引數分別是 partialView和 Action的名字。當然還有其他的過載函式,我們只說最常用的。應用時可以按照我們前面舉的例子。
從前端的UI開始MVC分離的比較好,開發順序沒有特別要求,先開發哪一部分都可以,這次我們主要講解前端UI的部分。ASP.NET MVC拋棄了WebForm的一些特有的習慣,例如伺服器端控制元件,ViewState這些東西,讓Web迴歸原始的狀態,Web是什麼樣子就是什麼樣子。
http://www.cnblogs.com/miro/p/4806199.html
摘要:
第一階段1~10篇已經覆蓋了MVC開發必要的基本知識。
第二階段11~20篇將會側重於專題的講解,一篇文章解決一個實際問題。
根據園友的反饋, 本篇文章將會先對呼聲最高
上篇文章介紹了EF實現CRUD及一些基本的Html Helpers.
這次我們將會對之前的內容進行一些修改和重構:
引入Bootstrap樣式,搭建幾類共用的模板頁,對UI進行一些改造
分類介紹Html Helpers
完善一些功能
文章提綱
理論基礎
大家久等了。
本篇專題主要講述MVC中的許可權方案。
許可權控制是每個系統都必須解決的問題,也是園子裡討論最多的專題之一。
前面的系列文章中我們用到了 SysUser, SysRole, SysUserRole 這幾個示例表。
我們以此為基礎,完成RBAC (基於角 maps setting i++ log item 文檔 應該 動態生成 內容 上篇文章我們完成了 動態生成多級菜單 這個實用組件。
本篇文章我們要開發另一個實用組件:面包屑導航。
面包屑導航(BreadcrumbNavigation)這個概念來自童話故事"漢賽爾和格萊特"
第一個MVC應用程式1建立MVC專案開啟VS ,File--新建--專案,選擇ASP Web專案,命名後確認。選擇(Empty)空模板,專案建立完成,會看到 解決方案管理器 視窗顯示一些資料夾,如圖,這是一個MV key 元素 action 地址 登錄ui acc 場景 stact name 貓和你都歸我 2017/10/01 17:00:29 今天學習了第二課的內容,下面是我總結的知識點,希望會有所幫助,也希望多多指導!一、對專業名詞的解釋Action Method Selec 一、基於LoG運算元的影象邊緣檢測原圖:1.LoG運算元與自定義濾波運算元進行比較的結果:2.LoG運算元的結果:3.自定義3*31 1 1 1 -8 1 1 1 1 濾波結果:二、程式碼解析下面是一段基於LoG運算元的影象邊緣檢測的程式碼,同時會生成兩個結果,一個是LoG運算元的結果,第二個是自 redirect name php sql語句 rop 方法 輸入框 一次 編輯 目錄
【第一篇】ASP.NET MVC快速入門之數據庫操作(MVC5+EF6)
【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6)
【第三篇】ASP.NET MVC快速入門
期待已久的EF終於來了。
學完本篇文章,你將會掌握基於EF資料模型的完整開發流程。
本次將會完成EF資料模型的搭建和使用。
基於這個模型,將之前的示例新增資料庫查詢驗證功能。
文章提綱
概述 & 要點
詳細步驟
總結
概述 & 要點
下面是本文要點,正文部分會有 app authent 查詢 pan 得到 登錄界面 dbconnect 升級 class 原文:MVC5+EF6 完整教程17--升級到EFCore2.0EF Core 2.0上周已經發布了,我們也升級到core
文章內容基於vs2017,請大家先安裝好vs2017(1 相關推薦
MVC5 + EF6 入門完整教程 四
MVC5+EF6 入門完整教程九
MVC5+EF6 入門完整教程12--靈活控制Action權限
MVC5+EF6 入門完整教程七
MVC5+EF6 入門完整教程十
MVC5+EF6 入門完整教程4 :EF基本的CRUD
MVC5 + EF6 入門完整教程一
MVC5+EF6 入門完整教程八
MVC5+EF6 入門完整教程6 :分部檢視(Partial View)
MVC5+EF6 入門完整教程2 :從前端UI開始
MVC5+EF6 入門完整教程11--細說MVC中倉儲模式的應用
MVC5+EF6 入門完整教程五
MVC5+EF6 入門完整教程12--靈活控制Action許可權
MVC 5 + EF6 入門完整教程14 -- 動態生成面包屑導航
ASP.NET + MVC5 入門完整教程三 (上) ---第一個MVC專案
MVC5+EF6入門記(二)
【OpenCV影象處理入門學習教程四】基於LoG運算元的影象邊緣檢測
【第四篇】ASP.NET MVC快速入門之完整示例(MVC5+EF6)
MVC5 + EF6 完整入門教程三
MVC5+EF6 完整教程17--升級到EFCore2.0