日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

MVC中使用Entity Framework 基于方法的查询学习笔记 (二)

發布時間:2023/12/10 c/c++ 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MVC中使用Entity Framework 基于方法的查询学习笔记 (二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解釋,不解釋:

緊接上文,我們在Visual Studio2012中看到系統為我們自動創建的視圖(View)文件Index.cshtml中,開頭有如下這句話:

@model IEnumerable<GuestBook.Models.Book>

這句話是MVC通過強類型獲取數據的方式,我們可以看出,在MVC視圖中使用了IEnumerable<T>接口來循環讀取數據并生成列表,該接口在System.Collections.Generic命名空間下。這就需要我們在控制器中傳遞的數據也是IEnumerable<T>類型的。

那么,我們是如何通過控制器將數據傳遞到視圖中的哪?在MVC中我們使用數據上下文來存取數據,數據上下文是一個繼承自DbContext基類的派生類,該類定義在System.Data.Entity命名空間下,DbContext 通常將與包含模型的根實體的?DbSet<TEntity>?屬性的派生類型一起使用。?DbContext簡化了實體與數據庫的溝通細節,讓我們可以專注于邏輯的開發,值得一提的是,在定義它的構造函數時可以使用基類的構造函數指明使用數據庫的鏈接字符串,如下定義:

public MVCGuestBookContext(): base("name=DefaultConnection"){}

在使用DbContext創建派生類的實例時,會自動初始化這些根實體的?DbSet<TEntity>?集合。在DbContext這個派生類中,我們可以定義類似上節中的

public DbSet<Book> Books { get; set; }

這是一個DbSet<Tentity>泛型集合類,它為數據上下文類提供了一個可以訪問的屬性,該屬性指定的類型為我們定義的Model,如:我們定義的Book。因為該屬性通過DbContext初始化,所以我們利用該屬性的定義,就可以使用集合的操作方式對數據進行查看等等操作。比如我們上節中在控制器中定義了數據上下文對象:

private MVCGuestBookContext db = new MVCGuestBookContext();

我們就可以在Index動作中使用

var data = db.Books.ToList();

來獲取這個集合中的所有行,并通過動作中的ViewResult將data傳遞到視圖中,如下:

return View(data);

視圖頁面通過@model 定義接收到這個data數據后,就可以使用@foreach (var item in Model) 遍歷集合,得到想要的數據列表。

?

?DbContext類

我們常使用自定義的數據上下文類繼承自DbContext類,因為DbContext幫我們隱藏了與數據庫溝通的細節,僅僅通過構造函數時指明數據庫鏈接字符串,就可以實現自動初始化類型為DbSet<Tentity>泛型集合類的屬性。方便了我們對數據的存取。該類定義如下:

命名空間:??System.Data.Entity
程序集:??EntityFramework(在 EntityFramework.dll 中)

public class DbContext : IDisposable, IObjectContextAdapter

該類提供了一系列的屬性和方法來進行操作,你可以仔細閱讀MSDN中的介紹。

?

特別注釋:

在構造函數中,其中有一個構造函數重載是指明鏈接字符串。

DbContext(String) 可以將給定字符串用作將連接到的數據庫的名稱或連接字符串來構造一個新的上下文實例。 請參見有關這如何用于創建連接的類備注。?

?在方法中,有一個SaveChanges()方法,該方法可以將在此上下文中所做的所有更改保存到基礎數據庫。?

SaveChanges 將在此上下文中所做的所有更改保存到基礎數據庫。

?

DbSet<TEntity>?類

DbSet<TEntity>類在數據上下文中主要作用在定義該類型的屬性,利用這個屬性可以方便對數據進行創建、讀取、更新、刪除等操作。該類定義如下:

命名空間:??System.Data.Entity
程序集:??EntityFramework(在 EntityFramework.dll 中)

[SuppressMessageAttribute("Microsoft.Naming", "CA1710:IdentifiersShouldHaveCorrectSuffix", Justification = "Name is intentional")] public class DbSet<TEntity> : DbQuery<TEntity>, IDbSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>, IQueryable, IEnumerable where TEntity : class

?從這個類定義中,我們可以看出它實現了DbQuery<TEntity>,?IDbSet<TEntity>, IQueryable<TEntity>, IEnumerable<TEntity>,?IQueryable, IEnumerable 接口,這意味著,他可以使用這些接口提供的屬性及方法來操作數據。

?

特別注釋:

該類具有一些實用的方法可供我們使用,例如對數據進行操作的Add(),Find(),Remove(),需要重點介紹的是SqlQuery還可以使用原生的SQL語句執行操作,十分方便,你可以閱讀http://www.cnblogs.com/mane/p/3387960.html文章詳細了解,如下:

Add 將給定實體以“已添加”狀態添加到集的基礎上下文中,這樣一來,當調用 SaveChanges 時,會將該實體插入到數據庫中。 Find 查找帶給定主鍵值的實體。 如果上下文中存在帶給定主鍵值的實體,則立即返回該實體,而不會向存儲區發送請求。 否則,會向存儲區發送查找帶給定主鍵值的實體的請求,如果找到該實體,則將其附加到上下文并返回。 如果未在上下文或存儲區中找到實體,則返回 null。 Remove 將給定實體標記為“已刪除”,這樣一來,當調用 SaveChanges 時,將從數據庫中刪除該實體。 請注意,在調用此方法之前,該實體必須以另一種狀態存在于該上下文中。 SqlQuery 創建一個原始 SQL 查詢,該查詢將返回此集中的實體。 默認情況下,上下文會跟蹤返回的實體;可通過對返回的 DbSqlQuery<TEntity> 調用 AsNoTracking 來更改此設置。 請注意返回實體的類型始終是此集的類型,而不會是派生的類型。 如果查詢的一個或多個表可能包含其他實體類型的數據,則必須編寫適當的 SQL 查詢以確保只返回適當類型的實體。 

另外,該類還提供了豐富的擴展方法,你可以訪問MSDN了解更多詳情http://msdn.microsoft.com/query/dev11.query?appId=Dev11IDEF1&l=ZH-CN&k=k(System.Data.Entity.DbSet`1);k(DbSet%3CUser%3E);k(TargetFrameworkMoniker-.NETFramework,Version%3Dv4.0);k(DevLang-csharp)&rd=true

?

有了上面的知識,現在,我們可以修改上節中的文檔實現簡單的數據插入。

MVCGuestBookContext.cs?

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity;// namespace GuestBook.Models {public class MVCGuestBookContext : DbContext{public MVCGuestBookContext(): base("name=DefaultConnection"){}public DbSet<User> Users { get; set; }public DbSet<Book> Books { get; set; }} }

HomeController.cs

using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using System.Web; using System.Web.Mvc; using GuestBook.Models;namespace GuestBook.Controllers {public class HomeController : Controller{private MVCGuestBookContext db = new MVCGuestBookContext();public ActionResult Index(){var user = db.Users.Find(3);db.Books.Add(new Book() { Id = 33, Body = "這是一個正文",PublishOn=DateTime.Now, User=user});db.SaveChanges();return View(db.Books.ToList());}} }

?

?題外話:本人才疏學淺,所以不對的地方,還請各位高人指點迷津,下一節將講述另外的幾個類,以全面了解使用函數方式操作數據,本文所有內容都為本人理解而寫,不代表官方定義!

轉載于:https://www.cnblogs.com/mane/p/3396522.html

總結

以上是生活随笔為你收集整理的MVC中使用Entity Framework 基于方法的查询学习笔记 (二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。