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,如果順利你就能看到如下提示:

image

我們可以看到它自動創建了相應的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迪士尼Open-mouthed smile好期待,嘿嘿。

后面我會把用Razor Page遇到的問題總結放上來,非常看好它,相信會越來越火的。

PS:asp.net core QQ學習群:376248054 通關密碼:cnblogs(無密碼一律不通過)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM