zoukankan      html  css  js  c++  java
  • 如何搭建MVC + EF 框架

    1、搭建MVC框架

       1.1 VS2010:需要安装WPI 安装 ASP.NET MVC 4Visual Studio 2010 系统必备组件

       如果上述链接无法打开,请访问:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

       

        如果VS2010 创建Web项目时,出现ASP.NET MVC 4 Web Application ,说明组件安装成功。

       1.2 VS2012:无需安装任何组件

      

    2、搭建EF框架

      

       2.1 用SQL脚本创建数据库OumindBlog

      

    USE [OumindBlog]
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[Enumeration](
     [e_id] [int] IDENTITY(1,1) NOT NULL,
     [e_ename] [varchar](50) NOT NULL,
     [e_cname] [varchar](50) NOT NULL,
     [e_type] [varchar](50) NOT NULL,
     [e_remark] [varchar](200) NOT NULL,
     [e_addtime] [datetime] NOT NULL,
     [e_delflag] [bit] NOT NULL,
     CONSTRAINT [PK_enumeration] PRIMARY KEY CLUSTERED
    (
     [e_id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'枚举表id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Enumeration', @level2type=N'COLUMN',@level2name=N'e_id'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'枚举英文名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Enumeration', @level2type=N'COLUMN',@level2name=N'e_ename'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'枚举中文名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Enumeration', @level2type=N'COLUMN',@level2name=N'e_cname'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'父枚举id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Enumeration', @level2type=N'COLUMN',@level2name=N'e_type'
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[BlogUser](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [LoginName] [nvarchar](50) NOT NULL,
     [LoginPwd] [char](32) NOT NULL,
     [CnName] [nvarchar](50) NOT NULL,
     [Email] [nvarchar](50) NOT NULL,
     [IsLock] [int] NOT NULL,
     [IsDel] [bit] NOT NULL,
     [AddTime] [datetime] NOT NULL,
     [LastLoginTime] [datetime] NOT NULL,
     CONSTRAINT [PK_BlogUser] PRIMARY KEY CLUSTERED
    (
     [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    SET ANSI_PADDING OFF
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用户表主键ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'Id'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'登录名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'LoginName'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'密码(md5_取16位)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'LoginPwd'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'中文名' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'CnName'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'邮件地址' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'Email'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'锁定标志' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'IsLock'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'删除标志' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'IsDel'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'新增时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'AddTime'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后登录时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogUser', @level2type=N'COLUMN',@level2name=N'LastLoginTime'
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[BlogArticleCate](
     [Id] [int] IDENTITY(1,1) NOT NULL,
     [Author] [int] NOT NULL,
     [Name] [nvarchar](50) NOT NULL,
     [Remark] [nvarchar](200) NULL,
     [Statu] [int] NOT NULL,
     [IsDel] [bit] NOT NULL,
     [Addtime] [datetime] NOT NULL,
     CONSTRAINT [PK_blog_article_cate] PRIMARY KEY CLUSTERED
    (
     [Id] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY]
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'文章类别表' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'Id'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'作者id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'Author'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'博客分类名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'Name'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'博客分类介绍' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'Remark'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'状态 1-公开2-隐藏3-好友公开' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'Statu'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'删除标志' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'IsDel'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'新增时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticleCate', @level2type=N'COLUMN',@level2name=N'Addtime'
    GO
    
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[BlogArticle](
     [AId] [int] IDENTITY(1,1) NOT NULL,
     [ACate] [int] NOT NULL,
     [AAuthor] [int] NOT NULL,
     [ATitle] [nvarchar](100) NOT NULL,
     [AContent] [ntext] NOT NULL,
     [AImgsrc] [nvarchar](200) NULL,
     [APlnum] [int] NOT NULL,
     [AAllowPL] [bit] NOT NULL,
     [AIsTop] [bit] NOT NULL,
     [ATag] [nvarchar](50) NULL,
     [ACick] [int] NOT NULL,
     [AStatu] [int] NOT NULL,
     [AAddtime] [datetime] NOT NULL,
     [AUpdatetime] [datetime] NOT NULL,
     [AIsDel] [bit] NOT NULL,
     [AHtmlSrc] [nvarchar](50) NULL,
     CONSTRAINT [PK_blog_article] PRIMARY KEY CLUSTERED
    (
     [AId] ASC
    )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'文章表ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AId'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'所属类别' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'ACate'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'作者' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AAuthor'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'标题' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'ATitle'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'文章内容' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AContent'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'评论数' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'APlnum'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否允许评论' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AAllowPL'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否置顶' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AIsTop'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'文章标签' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'ATag'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'点击次数' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'ACick'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'状态 1-公开2-隐藏3-好友公开' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AStatu'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AAddtime'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'最后修改时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AUpdatetime'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'删除标志' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AIsDel'
    GO
    EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'用来保存这篇文章的静态页面地址' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'BlogArticle', @level2type=N'COLUMN',@level2name=N'AHtmlSrc'
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_BlogArticle_APlnum]  DEFAULT ((0)) FOR [APlnum]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_blog_article_AllowPL]  DEFAULT ((1)) FOR [AAllowPL]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_blog_article_IsTop]  DEFAULT ((0)) FOR [AIsTop]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_BlogArticle_ACick]  DEFAULT ((0)) FOR [ACick]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_blog_article_Satu]  DEFAULT ((2)) FOR [AStatu]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_blog_article_Addtime]  DEFAULT (getdate()) FOR [AAddtime]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_BlogArticle_Updatetime]  DEFAULT (getdate()) FOR [AUpdatetime]
    GO
    
    ALTER TABLE [dbo].[BlogArticle] ADD  CONSTRAINT [DF_blog_article_IsDel]  DEFAULT ((0)) FOR [AIsDel]
    GO
    
    ALTER TABLE [dbo].[BlogArticleCate] ADD  CONSTRAINT [DF_blog_article_cate_Statu]  DEFAULT ((1)) FOR [Statu]
    GO
    
    ALTER TABLE [dbo].[BlogArticleCate] ADD  CONSTRAINT [DF_blog_article_cate_Delflag]  DEFAULT ((0)) FOR [IsDel]
    GO
    
    ALTER TABLE [dbo].[BlogArticleCate] ADD  CONSTRAINT [DF_BlogArticleCate_Addtime]  DEFAULT (getdate()) FOR [Addtime]
    GO
    
    ALTER TABLE [dbo].[BlogUser] ADD  CONSTRAINT [DF_BlogUser_IsLock]  DEFAULT ((0)) FOR [IsLock]
    GO
    
    ALTER TABLE [dbo].[BlogUser] ADD  CONSTRAINT [DF_BlogUser_IsDel]  DEFAULT ((0)) FOR [IsDel]
    GO
    
    ALTER TABLE [dbo].[BlogUser] ADD  CONSTRAINT [DF_BlogUser_AddTime]  DEFAULT (getdate()) FOR [AddTime]
    GO
    
    ALTER TABLE [dbo].[BlogUser] ADD  CONSTRAINT [DF_BlogUser_LastLoginTime]  DEFAULT (getdate()) FOR [LastLoginTime]
    GO
    
    ALTER TABLE [dbo].[Enumeration] ADD  CONSTRAINT [DF_enumeration_e_addtime]  DEFAULT (getdate()) FOR [e_addtime]
    GO
    
    ALTER TABLE [dbo].[Enumeration] ADD  CONSTRAINT [DF_enumeration_e_delflag]  DEFAULT ((0)) FOR [e_delflag]
    GO
    
    ALTER TABLE [dbo].[BlogArticle]  WITH CHECK ADD  CONSTRAINT [FK_BlogArticle_BlogArticleCate] FOREIGN KEY([ACate])
    REFERENCES [dbo].[BlogArticleCate] ([Id])
    GO
    ALTER TABLE [dbo].[BlogArticle] CHECK CONSTRAINT [FK_BlogArticle_BlogArticleCate]
    GO
    
    ALTER TABLE [dbo].[BlogArticle]  WITH CHECK ADD  CONSTRAINT [FK_BlogArticle_BlogUser] FOREIGN KEY([AAuthor])
    REFERENCES [dbo].[BlogUser] ([Id])
    GO
    ALTER TABLE [dbo].[BlogArticle] CHECK CONSTRAINT [FK_BlogArticle_BlogUser]
    GO
    
    ALTER TABLE [dbo].[BlogArticle]  WITH CHECK ADD  CONSTRAINT [FK_BlogArticle_Enumeration] FOREIGN KEY([AStatu])
    REFERENCES [dbo].[Enumeration] ([e_id])
    GO
    ALTER TABLE [dbo].[BlogArticle] CHECK CONSTRAINT [FK_BlogArticle_Enumeration]
    GO
    
    ALTER TABLE [dbo].[BlogArticleCate]  WITH CHECK ADD  CONSTRAINT [FK_BlogArticleCate_BlogUser] FOREIGN KEY([Author])
    REFERENCES [dbo].[BlogUser] ([Id])
    GO
    ALTER TABLE [dbo].[BlogArticleCate] CHECK CONSTRAINT [FK_BlogArticleCate_BlogUser]
    GO
    View Code

      

         

       2.2 用VS2010创建一个MVC程序

      

       点击“确定”

    选择 “Empty”


       2.3 创建OumindBlog.edmx文件

       路径:项目->添加新项

     

       

    选择  数据 - ADO.NET 实体数据模型,然后把名称改为 OumindBlog

    选中从数据库生成,点击下一步

    把连接字符串名称改为 “BlogContext”

    在红框中打勾

    发现View文件夹下多了一个OumindBlog.edmx 文件

       2.4 添加 EntityFrame 程序包

      路径 :项目 ->管理NuGet程序包

       
      

    首先,需要从 NuGet 获取实体框架的最新版本。

      

    点击“安装”

      点击“我接受”


        

       

         如果EF程序包已安装,再次打开安装,可以看到程序包右上角有个绿色的对勾,说明程序包已安装。  

       2.5 添加 EF 5.x DbContext Generator for C# 模板

     

    双击OumindBlog.edmx文件,在空白处点右键,选择“添加代码生成项...”

    选择“EF 5.x DbContext Generator for C#”,输入名称 OumindBlog,然后单击“添加”

    从左侧菜单中选择“联机模板”,然后搜索“DbContext”


     添加完后,View文件夹下多了两个文件,一个是OumindBlog.Context.tt,另一个是OumindBlog.tt。

     搭建EF框架需要三个文件和两个组件

      A、三个文件:OumindBlog.Context.tt、OumindBlog.tt 和 OumindBlog.edmx

      B、两个组件:EntityFrame程序包 和 EF 5.x DbContext Generator for C#

    3、编写代码 

     3.1 在编写代码前,增加一个控制器HomeControllers(HomeController.cs)和一个View(Index.cshtml)




      

       3.2 打开HomeController.cs 文件

      

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.Mvc;
     6 
     7 
     8 namespace MvcTest.Controllers
     9 {
    10     public class HomeController : Controller
    11     {
    12         #region 0.1 Action方法 + ActionResult Index()
    13         /// <summary>
    14         /// Action方法
    15         /// </summary>
    16         /// <returns></returns>
    17         BlogContext db = new BlogContext();
    18         public ActionResult Index()
    19         {
    20             System.Text.StringBuilder sbhtml = new System.Text.StringBuilder();
    21             List<BlogArticle> list = (from d in db.BlogArticles where d.AIsDel == false select d).ToList();
    22             list.ForEach(d =>
    23             {
    24                 sbhtml.AppendLine("<div>" + d.ATitle.ToString() + "</div>");
    25             });
    26 
    27             ViewBag.HtmlStr = sbhtml.ToString();
    28 
    29             return View();
    30         }
    31         #endregion
    32     }
    33 }
    View Code


      

        在Index方法上单击右键,选择添加“视图”。

      

       把CheckBox的勾去掉,点击“添加”。

       3.3 打开Index.cshtml文件,路径:Views->Home->Index.cshtml

     1 @{
     2     Layout = null;
     3 }
     4 
     5 <!DOCTYPE html>
     6 
     7 <html>
     8 <head>
     9     <meta name="viewport" content="width=device-width" />
    10     <title>Index</title>
    11 </head>
    12 <body>
    13     <!--Html.Raw只打印出Html标签中的内容,ViewBag.HtmlStr从ViewBag中取数据并显示Html标签和内容-->
    14     @Html.Raw(ViewBag.HtmlStr)
    15 </body>
    16 </html>
    View Code

       3.4 运行结果

    在解决方案资源管理器中,选择MvcTest,点击“右键”,选中在浏览器中查看或者按快捷键 Ctrl + Shift + W

  • 相关阅读:
    敏捷开发感想
    团队分工
    My Partner‘s Code View
    课堂上面的练习
    APP测试用例
    Android App测试计划和设计测试矩阵
    BugReport-智慧农业APP
    图书管理系统的活动图和时序图
    图书管理系统用例图
    对图书管理系统5W1H的分析
  • 原文地址:https://www.cnblogs.com/luyuwei/p/3357522.html
Copyright © 2011-2022 走看看