Scaffolding Template on Asp.Net Core Razor Page
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 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.0Step 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 –referenceScriptLibrariesok,如果順利你就能看到如下提示:
我們可以看到它自動創建了相應的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(無密碼一律不通過)
原文地址:http://www.cnblogs.com/inday/p/scaffolding-template-on-asp-net-core-razor-page.html
.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結
以上是生活随笔為你收集整理的Scaffolding Template on Asp.Net Core Razor Page的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我心中的ASP.NET Core 新核心
- 下一篇: .NET Core多平台项目模板eSho