標籤:style blog class c code java
學習 ASP.NET MVC 也有一段時間了,打算弄個小程式練練手,做為學習過程中的記錄和分享。
首先,得確定需求,木有需求的話,那還搞個毛線呀!嗯……大致思考了一下,終於得出如下需求:
1、能自訂分類
2、能發文章
OK!就這樣,先從簡單的開始(其實是複雜的不會做),後面有需要再添加(希望水平能達到)。功能確定了,那麼改確定要做成什麼樣子的了。先和度娘商量一下先……
終於在我的淫威之下,度娘交出了一個比較簡潔的,源網站在這裡(表示感謝),被小弟閹割了之後效果如:
接下來就開始編碼了嗎?嗯!開始吧!開啟心愛的VS2013,建立一個web項目,用 .net framework4.5.1 架構,這個是我能用的最新的了,為什麼用最新的呢?因為……喜歡,這就夠了!(個人練習,用什麼都無所謂啦!!!)。解決方案名稱為 ShowPin 項目名稱為 ShowPin.Web
再來一張,選擇 MVC 模版,其他的沒選過,不會用 =_=!! 身分識別驗證用個人使用者賬戶,這個是為了偷懶,話說 ASP.NET Identity 還是很給力的,不用白不用 ^_^~
點擊確定之後,會看到以下介面:
解決方案結構:
先更新一把先:
好吧,開工吧!!在Models目錄下建立部落格分類(Category)和部落格(Post)兩個類,代碼貼在下面
Category:
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace ShowPin.Web.Models{ /// <summary> /// 分類 /// </summary> public class Category { public Category() { this.Posts = new List<Post>(); } /// <summary> /// 擷取或設定分類標題 /// </summary> public string Title { get; set; } /// <summary> /// 該分類下的內容集合 /// </summary> public virtual ICollection<Post> Posts { get; set; } }}
Post:
using System;using System.Collections.Generic;using System.Linq;using System.Web;namespace ShowPin.Web.Models{ /// <summary> /// 博文 /// </summary> public class Post { /// <summary> /// 擷取或設定內容標題 /// </summary> public string Title { get; set; } /// <summary> /// 擷取或設定內容 /// </summary> public string Content { get; set; } /// <summary> /// 擷取或設定內容發布日期 /// </summary> public DateTime CreateDate { get; set; } /// <summary> /// 擷取或設定點擊數 /// </summary> public int hits { get; set; } /// <summary> /// 擷取或設定分類ID /// </summary> public string CategoryId { get; set; } /// <summary> /// 擷取或設定分類 /// </summary> public virtual Category Category { get; set; } }}
好了,接下來就是傳說中的DBContext
ObjectContext:
using System;using System.Collections.Generic;using System.Data.Entity;using System.Linq;using System.Web;namespace ShowPin.Web.Models{ /// <summary> /// 資料內容 /// </summary> public class ObjectContext : DbContext { public ObjectContext() : base("ShowPinContext") { } /// <summary> /// 分類列表 /// </summary> public DbSet<Category> Categories { get; set; } /// <summary> /// 博文列表 /// </summary> public DbSet<Post> Posts { get; set; } }}
在 web.config 的 connectionStrings 節點添加如下代碼:
<add name="ShowPinContext" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-ShowPin.Context;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-ShowPin.Context.mdf" providerName="System.Data.SqlClient" />
大概是這個樣子的,看下面的圖片
好吧,接下來就讓用資料庫遷移功能,讓代碼在資料庫中表現出來。
下面這個就是“程式包管理主控台”
輸入:Enable-Migrations 然後按下“斷行符號”鍵
這個…… 出錯了,唉……出師不利啊!!錯誤原因就是當前項目中存在兩個上下文類型,SB VS 不知道要用哪個來產生資料庫,所以……
輸入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext 再“斷行符號”
又出錯了=_=!!
模型產生過程中檢測到一個或多個驗證錯誤:
ShowPin.Web.Models.Category: : EntityType“Category”未定義鍵。請為該 EntityType 定義鍵。
ShowPin.Web.Models.Post: : EntityType“Post”未定義鍵。請為該 EntityType 定義鍵。
Categories: EntityType: EntitySet“Categories”基於未定義任何鍵的類型“Category”。
Posts: EntityType: EntitySet“Posts”基於未定義任何鍵的類型“Post”。
這個是因為沒有定義主鍵,簡單來說就是傳說中的ID…… 在實體類上加上主鍵
/// <summary> /// 主鍵 /// </summary> public string Id { get; set; }
string 類型的主鍵,還是比較少見的。
再來一次,輸入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext 再“斷行符號”
我是猴子請來的逗逼嗎??
再來一次吧!!
輸入:Enable-Migrations -ContextTypeName ShowPin.Web.Models.ObjectContext -force 再“斷行符號”
搞定了 哈哈哈哈哈……
他還產生了一些檔案,來瞧瞧是什麼東西。
多了一個 Migrations 目錄,和 Configuration.cs 檔案,這是個什麼東西呢?先不管他。
接下來是對 Category 做 CRUD 操作,建立一個 Controller
點擊確定之後,奇蹟就出現了T T,在瀏覽器輸入:http://localhost:10223/Category
地址是我的本地地址,請根據實際情況修改。
很遺憾,出錯了!!!
因為之前啟用資料庫遷移之後,並沒有讓它更新,接下來就讓它更新吧!!開啟封裝管理員控制台,輸入 Add-Migration ini “斷行符號”
在 Migrations 目錄下又多了個檔案
是什麼東西?先不管它,接著輸入:Update-database
貌似成功了,看看 App_Data 目錄
資料庫產生好了,再重新整理網頁
終於成功了,哈哈……接著是 Post
大功告成!
來個小小的總結:
1、上面出現的一些小問題,基本上是由於不細心造成的,所以在接下來的學習中一定要細心
2、關於“封裝管理員控制台”的知識在這裡和這裡
3、上面的編碼模式為 “代碼優先”、“代碼先現行”,英文比較好記 code first
相關資料:
http://msdn.microsoft.com/zh-cn/data/jj193542.aspx
http://www.cnblogs.com/qouoww/tag/Entity%20Framework/
4、資料庫遷移的相關資料:
http://blog.csdn.net/vaivxuanzi/article/details/11633255
http://msdn.microsoft.com/zh-cn/data/jj554735.aspx、
接下來要做的事就是新增內容了,不用多久我就會升職加薪,當上總經理,出任CEO,贏取白富美,走上人生巔峰!想想還有點小激動~~