学习 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,赢取白富美,走上人生巅峰!想想还有点小激动~~

使用ASP.NET MVC+Entity Framework快速搭建博客系统的更多相关文章

  1. 使用ASP.NET MVC+Entity Framework快速搭建系统

    详细资料: http://www.cnblogs.com/dingfangbo/p/5771741.html 学习 ASP.NET MVC 也有一段时间了,打算弄个小程序练练手,做为学习过程中的记录和 ...

  2. Django快速搭建博客系统

    Django快速搭建博客系统 一.开发环境 Windows 7(64bit) python 3.6   https://www.python.org/ Django 2.0  https://www. ...

  3. ASP.NET MVC - Entity Framework

    ASP.NET MVC - Entity Framework 实体关系 关系是某个实体(表)的一条记录对应于另一个实体(表)的一条或多条记录. 一对多关系 单方面的包含关系称为一对多,而一对多和一对一 ...

  4. Hexo快速搭建博客

    1. 准备工作 ~ 安装node.js -> npm -> hexo-cli ~ 安装git -> 版本控制工具 2. 更换npm(nodejs package manager)源 ...

  5. day14搭建博客系统项目

    day14搭建博客系统项目 1.下载代码包 [root@web02 opt]# git clone https://gitee.com/lylinux/DjangoBlog.git 2.使用pid安装 ...

  6. ASP.NET MVC项目框架快速搭建实战

    MVC项目搭建笔记---- 项目框架采用ASP.NET MVC+Entity Framwork+Spring.Net等技术搭建,采用”Domain Model as View Model“的MVC开发 ...

  7. 使用coding和hexo快速搭建博客

    欢迎访问我的个人博客皮皮猪:http://www.zhsh666.xyz 今天教大家怎么用hexo快速搭建自己的博客.我不是专业人士,不懂前端知识,所以我十分讨厌那些专业术语,讲了一大堆,对于技术小白 ...

  8. 用 Hugo 快速搭建博客

    用 Hugo 搭建博客 Hugo 是一个用 Go 编写的静态站点生成器,生成速度很快 下面是具体操作: 1.安装 Hugo Windows 用户 使用 Chocolatey 或者 Scoop 快速安装 ...

  9. 从零开始,搭建博客系统MVC5+EF6搭建框架(4)上,前后台页面布局页面实现,介绍使用的UI框架以及JS组件

    一.博客系统进度回顾以及页面设计 1.1页面设计说明 紧接前面基础基本完成了框架搭建,现在开始设计页面,前台页面设计我是模仿我博客园的风格来设计的,后台是常规的左右布局风格. 1.2前台页面风格 主页 ...

随机推荐

  1. 从汇编看c++成员函数指针(二)

    下面先看一段c++源码: #include <cstdio> using namespace std; class X { public: virtual int get1() { ; } ...

  2. 研究 Javascript的&&和||的另类用法

    这篇文章主要介绍了Javascript的&&和||的另类用法,需要的朋友可以参考下 最近也没什么心思写文章了,感觉总有忙不完的事情,呵. 不过这些天又开始研究起 Titanium 来, ...

  3. C++中的类和对象(二)

    一,对象的动态建立和释放 1.什么是对象的动态建立和释放 通常我们创建的对象都是由C++编译器为我们在栈内存中创建的,我们无法对其进行生命周期的管理.所以我们需要动态的去建立该对象,因此我们需要在堆内 ...

  4. java性能优化技巧

    在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身.养成良好的编码习惯非常重要,能够显著地提升程序性能. 1. 尽量使用final修饰符. 带有final修饰符的类是不可派生的. ...

  5. Oracle左连接、右连接、全外连接

    Oracle  外连接 (1)左外连接 (左边的表不加限制)(2)右外连接(右边的表不加限制)(3)全外连接(左右两表都不加限制) 外连接(Outer Join) outer join则会返回每个满足 ...

  6. windows下开发PHP扩展(无需Cygwin)

    第一步:准备 1.php源码包和windows下的二进制包,以及安装Visual C++,并把Microsoft Visual Studio/Common/MSDev98/Bin的绝对路径添加到win ...

  7. 28 个 Unix/Linux 的命令行神器

    28 个 Unix/Linux 的命令行神器   下面是Kristóf Kovács收集的28个Unix/Linux下的28个命令行下的工具(原文链接),有一些是大家熟悉的,有一些是非常有用的,有一些 ...

  8. CC++初学者编程教程(15) 基于cocos2dx的安卓打包环境

    1首先安装python 2 单击next 3 选择默认路径,单击next 4选择完全安装,单击next 5单击next开始安装 6 安装完成 7 设置环境变量 8 添加python的路径到path 9 ...

  9. 非自定义和自定义Dialog的介绍!!!

    一.非自定义Dialog的几种形式介绍 转自:http://www.kwstu.com/ArticleView/kwstu_20139682354515 前言 对话框对于应用也是必不可少的一个组件,在 ...

  10. 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件

    一.控制ChartControl的Y轴范围 使用Devexpress中的CharControl控件,需要控制AxisY轴的显示范围,需要使用该控件的BoundDataChanged事件,具体代码如下: ...