新的剛來到,舊的就忘掉。學習 AspNet Core 2.0,沒有好的例子,是很痛苦的。《Pro ASP.NET Core MVC 2》中的 SportsStore 值得一看,不妨下載研究一下: 準備 1. 使用 Ubuntu 系統 2. 安裝 NetCore2.0 3. 安裝 VSCode 4. ...
新的剛來到,舊的就忘掉。學習 AspNet Core 2.0,沒有好的例子,是很痛苦的。《Pro ASP.NET Core MVC 2》中的 SportsStore 值得一看,不妨下載研究一下:
準備
1. 使用 Ubuntu 系統
2. 安裝 NetCore2.0
3. 安裝 VSCode
4. 安裝 Sqlite
開始工作
1. 新建文件夾 MvcLab,用 VSCode 打開,ALT + `,打開終端,輸入命令 dotnet new sln 生成解決方案;然後輸入如下命令,生成 x01.SportWeb 及其測試項目:
mkdir x01.SportWeb cd x01.SportWeb/ dotnet new mvc --auth Individual cd .. mkdir x01.SportTest cd x01.SprotTest/ dotnet new xunit cd .. dotnet sln add x01.SportWeb/x01.SportWeb.csproj dotnet sln add x01.SportTest/x01.SportTest.csproj
2. 對照 SportsStore 的例子,亦步亦趨即可。
補充說明
1. 採用 Ubuntu,取其跨平臺;--auth Individual 選項,是為用戶管理作准備。
2. x01.SportTest.csproj 中,需添加對 x01.SportWeb.csproj 的引用:
<ItemGroup> <ProjectReference Include="../x01.SportWeb/x01.SportWeb.csproj" /> </ItemGroup>
3. 在 ApplicationDbContext 添加 public DbSet<Product> Products {get; set:} 屬性後,需運行如下命令:
dotnet ef migration add AddProduct
更新 database 前需添加類 TempDbContextFactory 如下:
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; namespace x01.SportWeb.Data { public class TempDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext> { public ApplicationDbContext CreateDbContext(string[] args) { var builder = new DbContextOptionsBuilder<ApplicationDbContext>(); builder.UseSqlite("Data Source=app.db"); return new ApplicationDbContext(builder.Options); } } }
手工註釋 Migrations/*_AddProduct.cs 中的 AddForeignKey 部分:
// migrationBuilder.AddForeignKey( // name: "FK_AspNetUserTokens_AspNetUsers_UserId", // table: "AspNetUserTokens", // column: "UserId", // principalTable: "AspNetUsers", // principalColumn: "Id", // onDelete: ReferentialAction.Cascade);
運行如下命令更新 database:
dotnet ef database update
其他《Pro ASP.NET Core MVC 2》書中語之甚詳,不一一復敘也。