使用ASP.NET MVC+Entity Framework快速搭建部落格系統

來源:互聯網
上載者:User

標籤: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,贏取白富美,走上人生巔峰!想想還有點小激動~~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.