Scaffolding Template Intro

我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器,然后vs会根据你选择的Model自动生成相应的CURD的控制器和View,非常便利,这种就叫做 ASP.NET Scaffolding Template,之前雪燕大大有过一篇介绍,有兴趣可以看看【传送门】

大家知道近期Asp.Net Core2.0发布了,微软也推出了Razor Page来作为默认的Asp.Net Core Web项目,但一开始并没有提供Scaffolding Template(后简称ST)功能,使我们每次对于一个Model需要进行4-5个页面和PageModel的编写,代码量比Asp.Net MVC多了不少,好在ST及时出现,不过这次并没有结合到VS中,我们需要通过添加一个生成包及CMD命令来完成,虽然复杂了点,但至少编码量少了,Let’s do it!

Hello Scaffolding Razor Page

Step 1 : 创建Razor Page 项目

Step 2 : 创建一个Model,在这里我们创建一个Blog实体类:

public class Blog
{
public int BlogId { get; set; } public string Title { get; set; } public string Author { get; set; } public DateTime CreatedDate { get; set; }
}

Step 3 : 创建DbContext:

public class BlogDbContext : DbContext
{
public BlogDbContext(DbContextOptions<BlogDbContext> options) : base(options)
{
} public DbSet<Blog> Blogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>().ToTable("Blog");
}
}

Step 4 : 配置连接字符串并把这个DbContext通过DI的方式注册到项目容器中

public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<BlogDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("BlogDbContext")));
services.AddMvc();
}

记得在配置文件(appsettings.json)中加入connectString:

{
"ConnectionStrings": {
"MovieContext": "Server=(localdb)\\mssqllocaldb;Database=DemoDb;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}

Step 5 : 安装CodeGeneration package,工具-Nuget包管理器-程序包管理控制台

Install-Package Microsoft.VisualStudio.Web.CodeGeneration.Design -Version 2.0.

Step 6 : 添加数据迁移-更新到数据库:

Add-Migration Initial
Update-Database

[这里一定要做下迁移,否则生成代码会不成功,我估计生成代码会去读取数据库]

Step 7 : 打开终端(CMD or Powershell)

先移步到项目目录(Program.cs和Startup.cs这个目录)

我的是:E:\project\aspnet\Demos\WebApplication4\WebApplication4

然后输入以下命令:

dotnet aspnet-codegenerator razorpage -m Blog -dc BlogDbContext  -udl -outDir Pages\Blogs –referenceScriptLibraries

ok,如果顺利你就能看到如下提示:

我们可以看到它自动创建了相应的View和PageModel。

虽然没有MVC那么便利,但至少也节约了我们不少时间。

Issues

自动生成的DbContext的DbSet名字不正确

我们看下Create.cshtml.cs代码,其中一段:

public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
} _context.Blog.Add(Blog);
await _context.SaveChangesAsync(); return RedirectToPage("./Index");
}

可以看到 它使用了Blog作为实体类的集合名了,但在Step 3中,我使用的是Blogs,这应该是个bug,想提交的,但没有找到相应的项目。

写在最后

后天就是伟大的祖国生日了,大家节日快乐!明天去HK迪士尼好期待,嘿嘿。

后面我会把用Razor Page遇到的问题总结放上来,非常看好它,相信会越来越火的。

PS:asp.net core QQ学习群:376248054 通关密码:cnblogs(无密码一律不通过)

Scaffolding Template on Asp.Net Core Razor Page的更多相关文章

  1. ASP.NET Core - Razor 页面简介

    简介 随着ASP.NET Core 2 即将来临,最热门的新事物是Razor页面.在之前的一篇文章中,我们简要介绍了ASP.NET Core Razor 页面. Razor页面是ASP.NET Cor ...

  2. ASP.NET Core - Razor页面之Handlers处理方法

    简介 在前一篇文章中,我们讨论了Razor页面.今天我们来谈谈处理方法(Handlers). 我们知道可以将代码和模型放在 .cshtml 文件里面或与 .cshtml 匹配的 .cshtml.cs ...

  3. ASP.NET Core Razor中处理Ajax请求

    如何ASP.NET Core Razor中处理Ajax请求 在ASP.NET Core Razor(以下简称Razor)刚出来的时候,看了一下官方的文档,一直没怎么用过.今天闲来无事,准备用Rozor ...

  4. 学习ASP.NET Core Razor 编程系列一

    一. 概述 .NET Core 1.0发布的时候就想进行学习的,不过根据微软的以往的发布规律1.0版可以认为是大众测试版,2.0才算稳定.现在2.1都已经发布了预览版,之前对其"不稳定&qu ...

  5. 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  6. 学习ASP.NET Core Razor 编程系列五——Asp.Net Core Razor新建模板页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  7. 学习ASP.NET Core Razor 编程系列七——修改列表页面

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  8. 学习ASP.NET Core Razor 编程系列八——并发处理

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  9. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

随机推荐

  1. 【Java学习笔记之三十二】浅谈Java中throw与throws的用法及异常抛出处理机制剖析

    异常处理机制 异常处理是对可能出现的异常进行处理,以防止程序遇到异常时被卡死,处于一直等待,或死循环. 异常有两个过程,一个是抛出异常:一个是捕捉异常. 抛出异常 抛出异常有三种形式,一是throw, ...

  2. python2 urllib2抓取51job网的招聘数据

    #coding=utf-8 __author__ = "carry" import sys reload(sys) sys.setdefaultencoding('utf-8') ...

  3. SSH2项目网上书店系统手把手教学_Struts2+Spring+Hibernate整合开发

    一 序言 鉴于目前J2EE的火热程度,SSH2是每个学生毕业前都必须掌握的一门技术,所以在这里我就使用SSH2技术做一个小型项目,和大家一起学习. SSH2技术的基础概论就不再提了,直接说特点吧. 1 ...

  4. 数据库学习任务二:数据库连接对象SqlConnection

    数据库应用程序的开发流程一般主要分为以下几个步骤: 创建数据库 使用Connection对象连接数据库 使用Command对象对数据源执行SQL命令并返回数据 使用DataReader和DataSet ...

  5. VHDL学习记录

    VHDL全名Very-High-Speed Integrated Circuit Hardware Description Language ,是一种标准硬件描述语言.下面通过60进制计数器来分析VH ...

  6. grunt之concat、cssmin、uglify

    周末有点懒,跑去看了<智取威虎山>,手撕鬼子的神剧情节被徐老怪一条回忆线就解释过去了,牛到极致尽是这种四两拨千斤的处理方式,手撕加分,四星推荐. --------------------- ...

  7. Automatic Generation of Animated GIFs from Video论文研读及实现

    论文地址:Video2GIF: Automatic Generation of Animated GIFs from Video 视频的结构化分析是视频理解相关工作的关键.虽然本文是生成gif图,但是 ...

  8. 201521123086《java程序设计》第7周

    本章学习总结 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 以下是ArrayList的contains源代码: public boolean con ...

  9. 201521123103 《Java学习笔记》 第六周学习总结

    一.本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 二.书面作业 1.clone方法 1.1 Object对象中 ...

  10. 201521123044 《Java程序设计》第5周学习总结

    1. 本章学习总结 2. 书面作业 1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 答: ...