許久沒用C#寫程式。聽說進來發生大事,.NetCore2.0發佈了,於是便學習了下,本站也應運而生。 大多數的地方按照官方的文檔起步走就可以了,這裡談談遇到的幾個坑。 首先,本站是基於ASP.NetCore2.0和EntityFrameWorkCore.Sqlite的,前端使用了layui,搭建於C ...
許久沒用C#寫程式。聽說進來發生大事,.NetCore2.0發佈了,於是便學習了下,本站也應運而生。
大多數的地方按照官方的文檔起步走就可以了,這裡談談遇到的幾個坑。
首先,本站是基於ASP.NetCore2.0和EntityFrameWorkCore.Sqlite的,前端使用了layui,搭建於CentOS7上。
ASP.NetCore部分沒有什麼難度,選擇MVC方式,基本上和原來的asp.net mvc差不多。不過我也是很久沒有用過mvc了,所以摸索了一下,tagHelper很好用。
主要說說EFC,目前是EFC2.0,不支持延遲查詢,所以每一個表關聯查詢需要Include()。然後表關聯上也不能用多對多,不過多對多的地方可以加中間類來解決。
比如一篇文章有多個分類,而一個分類也有多篇文章。這裡用到了多對多的關聯,所以我增加了一個中間關聯的類型,包含文章和分類的ID。用兩個一對多的關聯,規避了多對多的關聯。
EF還有一個控制台命令 dotnet ef
使.NetCore2.0網站項目支持EF.Sqlite
1)添加appsettings.json,並配置sqlite的連接字元串
"sqlitedb": "Filename=./sqlitedb.db"
註意appsettings.json添加完之後設置屬性為複製到輸出目錄
2)在Startup中啟用服務
添加引用:
using Microsoft.Extensions.Configuration;
using Microsoft.EntityFrameworkCore;
添加屬性:
public IConfiguration Configuration { get; set; }
添加構造:
public Startup()
{
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
}
在ConfigureServices()啟用:
var connection = Configuration.GetConnectionString("sqlitedb");
services.AddDbContextPool<DataContext>(options => options.UseSqlite(connection));
此時缺少DataContext類,新建之在Data文件夾下
支持Identity
1)編輯DataContext
添加引用:
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
繼承IdentityDbContext<User>
添加非預設構造函數:
public DataContext(DbContextOptions<DataContext> options)
: base(options)
{
}
2)此時缺少User類,新建之在Model文件夾下,並繼承自IdentityUser
在User類中添加引用:
using Microsoft.AspNetCore.Identity;
3)在Startup類中
ConfigureServices()里啟動服務:
services.AddMvc();
services.AddIdentity<User, IdentityRole>().AddEntityFrameworkStores<DataContext>().AddDefaultTokenProviders();
在Pipeline的Configure()函數中進行身份驗證:
app.UseAuthentication();
此後可以在Controller里使用[Authorize]標簽驗證登錄身份了
使用EF工具生成資料庫結構
1)右鍵編輯項目文件csproj
在ItemGroup中添加
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
2)打開項目所在目錄,按住shift後右鍵呼出菜單打開命令行
在命令行中輸入:
dotnet ef migrations add InitialCreate
名稱可替換
如果遇到錯誤,請分析錯誤原因
之後會在項目下生成一個Migrations文件包含了資料庫結構相關代碼
輸入下麵命令並回車,使之生效:
dotnet ef database update
然後就會出現appsettings.json中配置的資料庫文件.