专栏首页NetCoreDo You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板

Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板

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.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(无密码一律不通过)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Fluent Nhibernate之旅(五)--利用AutoMapping进行简单开发

    Fluent Nhibernate(以下简称FN)发展到如今,已经相当成熟了,在Nhibernate的书中也相应的推荐了使用FN来进行映射配置,之前写的FN之旅...

    脑洞的蜂蜜
  • [原创]Fluent NHibernate之旅(四)-- 关系(中)

    接着上一篇,我们继续讲解ORM中的关系。在数据库设计中,我们最多打交道的,要算一对多关系了,延续我们的示例,我们来讲解一下一对多的关系。 Fluent NHib...

    脑洞的蜂蜜
  • [原创]Fluent NHibernate之旅二--Entity Mapping

    接着上一篇,今天我们说说ORM中的Mapping。如果你要体验NHibernate的强大,首先你就要学会配置,包括SessionFactory和Mapping的...

    脑洞的蜂蜜
  • 通过WebSocket传输文件

    jeremyxu
  • ASP.NET Core真实管道详解[1]:中间件是个什么东西?

    ASP.NET Core管道虽然在结构组成上显得非常简单,但是在具体实现上却涉及到太多的对象,所以我们在 《ASP.NET Core管道深度剖析[共4篇]》 中...

    蒋金楠
  • 01-EF Core笔记之创建模型

    使用EF Core的第一步是创建数据模型,模型建的好,下班走的早。EF Core本身已经设置了一系列约定来帮我们快速的创建模型,例如表名、主键字段等,毕竟约定大...

    拓荒者-NET
  • 【小家Spring】高性能关键技术之---体验Spring MVC的异步模式(Callable、WebAsyncTask、DeferredResult) 基础使用篇

    现在已经在2019年,这个时候再来谈Spring MVC的异步模式,好像有点老掉牙了。毕竟现在都Spring5的时代了,甚至将来肯定是webflux的天下了。

    YourBatman
  • 适用于未来的暗硅嵌入式芯片多处理器的节能异构存储架构(CS Hardware Architecture)

    原文题目: An Energy-Efficient Heterogeneous Memory Architecture for Future Dark Sili...

    吴亚芳
  • 从零开始实现一个 mini-Retrofit 框架

    本篇文章将采用循序渐进的编码方式,从零开始实现一个Retorift框架,在实现过程中不断提出问题并分析实现,最终开发出一个mini版的Retrofit框架

    Android技术干货分享
  • 【大数据报告】回顾2017年数字阅读市场:30岁以下年轻人为付费主体

    【数据猿导读】 相比2016年掌阅、QQ阅读、书旗三强相争格局,2017年,基本上变成了掌阅与QQ阅读两强局面,书旗的陨落背后,则是快看漫画的崛起,这也代表着新...

    数据猿

扫码关注云+社区

领取腾讯云代金券