ASP.NET Core ----ASP.NET Core中使用Code First
開發工具:vscode ,vs2017
語言:net core 2.1
資料庫:sql server 2014
1 建立.net core專案
開啟vscode,按快捷鍵ctrl+shift+~,開啟powershell終端。建立.net core,輸入命令
--新建一個資料夾:md corefirst
--建立.net core MVC模板:dotnet new MVC(如圖所示,建立成功,如果沒有成功,請安裝net core sdk)
接著輸入 dotnet run,看執行效果,.net core2.0之後啟用https,即將下圖中http://localhost:5000和https://localhost:5001,在瀏覽器開啟也會看到相對應的結果
2 建立Code First模板
然後用我們宇宙第一的IDE vs開啟剛建立的這個mvc專案。我這裡使用vs2017。
開啟剛建立的專案,在解決方案上線新建一個專案,選擇.NET Standard(不知道什麼的點這裡好好閱讀一下)模板,建立一個類庫名稱叫EFDbServices。在EFDbServices中新建一個Class,我這裡新建的叫EFDataContext,且這個類繼承DbContext,需要在NuGet中引用Microsoft.EntityFrameworkCore,這裡可以直接在NuGet管理器中輸入
Install-Package Microsoft.EntityFrameworkCore -Version 3.0.0-preview.18572.1新增引用
新建一個ModelBaseClassLib這個基類,程式碼如下:
public class ModelBaseClassLib
{
/// <summary>
/// 主鍵
/// </summary>
[Key]
public int ID { get; set; }
/// <summary>
/// 是否刪除
/// </summary>
public bool IsDeleted { get; set; } = false;
/// <summary>
/// 新增人
/// </summary>
public int InsertBy { get; set; }
/// <summary>
/// 新增時間
/// </summary>
public DateTime InsertDateTime { get; set; } = DateTime.Now;
/// <summary>
/// 編輯人
/// </summary>
public int UpdateBy { get; set; }
/// <summary>
/// 編輯時間
/// </summary>
public DateTime UpdateDateTime { get; set; }
/// <summary>
/// 刪除人
/// </summary>
public int DeleteBy { get; set; }
/// <summary>
/// 刪除時間
/// </summary>
public DateTime DeleteDateTime { get; set; }
}
建立UserManagement和RoleManagement分別繼承自ModelBaseClassLib,程式碼如下:
UserManagement.cs
public class UserManagement: ModelBaseClassLib
{
/// <summary>
/// 姓名
/// </summary>
[MaxLength(100)]
[Required, Column("UserNmae")]
public string UserNmae { get; set; }
/// <summary>
/// 登入編號
/// </summary>
[MaxLength(20)]
[Required, Column("UserLoginCode")]
[Unique]
public string UserLoginCode { get; set; }
/// <summary>
/// 登入密碼
/// </summary>
[MaxLength(40)]
[Required, Column("UserLoginPwd")]
public string UserLoginPwd { get; set; }
public virtual IList<RoleManagement> Role_Ids { get; set; }
}
RoleManagement.cs
public class RoleManagement : ModelBaseClassLib
{
/// <summary>
/// 角色編碼
/// </summary>
[MaxLength(50)]
[Required, Column("RoleCode")]
[Unique]
public string RoleCode { get; set; }
/// <summary>
/// 角色名稱
/// </summary>
[MaxLength(50)]
[Required, Column("RoleName")]
[Unique]
public string RoleName { get; set; }
}
code first新增唯一性約束(Unique)
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class UniqueAttribute : ValidationAttribute
{
public override Boolean IsValid(Object value)
{
return true;
}
}
修改EFDataContext.cs
public class EFDataContext:DbContext
{
public EFDataContext(DbContextOptions<EFDataContext> options):base(options) {}
public DbSet<UserManagement> userManagements { get; set; }
public DbSet<RoleManagement> roleManagements { get; set; }
}
3 新增依賴注入,生成資料庫
在corefirst這個解決方案中修改appsettings.json,眾所周知,net core中已經沒有了web.config,所有配置都是在appsettings.json進行配置。
在appsettings.json中新增sql server連線字串。
新增一個新的節點ConnectionStrings,在這個節點下新增 "Connection": "Data Source=.;Initial Catalog=EFCoreFirst;User ID=sa;Password=123456",完整的appsettings.json如下:
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"ConnectionString": {
"Connection": "Data Source=.;Initial Catalog=EFCore;User ID=sa;Password=123456"
}
}
.net core中已經沒有了Global.asax這個一般處理程式,代替它的是一個全新的Startup.cs這樣一個啟動類,net core中涉及到所有的操作,都需要在這個檔案中注入,比如常見的cookie,session,json,xml等,我這裡需要做code first,就需要對DbContext這個類做注入。
net core讀取appsettings需要藉助IConfiguration這個介面。
讀取剛才配置的字串
string _connectionString = Configuration.GetSection("ConnectionString")["Connection"];新增註入,(需要引用using Microsoft.EntityFrameworkCore)
新增剛建立的EFDataContext類
services.AddDbContext<EFDataContext>()
使用sql server資料庫
services.AddDbContext<EFDataContext>(o=> {
o.UseSqlServer(_connectionString);
});設定遷移配置,將EF的模板的命令空間遷移到當前注入中
services.AddDbContext<EFDataContext>(o=> {
o.UseSqlServer(_connectionString,s=> {
s.MigrationsAssembly("EFDbServices");
});
});以上可簡寫為:
services.AddDbContext<EFDataContext>(options =>
options.UseSqlServer(_connectionString, b =>
b.MigrationsAssembly("EFDbServices")));
services.AddMvc();然後執行Add-Migration core01。如圖
再執行update-database,這樣資料庫和表就建立成功。
以上源打碼已經打包放到github,有需要的可以進行下載。https://github.com/LZZSF/corecodefitsrt
相關文章
- 【EF Core】Code first
- 在ASP.NET Core中用HttpClient(六)——ASP.NET Core中使用HttpClientFactoryASP.NETHTTPclient
- ASP.NET 6.0 Core 遷移 ASP.NET Core 7.0ASP.NET
- EF Core 的 Code First 模式模式
- ASP.NET Core 中使用TypeScriptASP.NETTypeScript
- ASP.Net Core5.0 EF Core使用記錄ASP.NET
- 【asp.net core 系列】14 .net core 中的IOCASP.NET
- ASP.NET Core使用EF Core操作MySql資料庫ASP.NETMySql資料庫
- 在ASP.NET Core中使用ViewComponentASP.NETView
- jwt-在asp.net core中的使用jwtJWTASP.NET
- ASP.NET Core 中的快取ASP.NET快取
- 在 ASP.NET Core 中禁用HTTPSASP.NETHTTP
- 聊聊ASP.NET Core中的配置ASP.NET
- ASP.NET Core 學習筆記 第四篇 ASP.NET Core 中的配置ASP.NET筆記
- ASP.NET Core 入門教程 2、使用ASP.NET Core MVC框架構建Web應用ASP.NETMVC框架架構Web
- ASP.NET Core 學習筆記 第五篇 ASP.NET Core 中的選項ASP.NET筆記
- ASP.NET Core Web API中使用SwaggerASP.NETWebAPISwagger
- ASP.NET Core初步使用Quartz.NETASP.NETquartz
- 如何在ASP.NET Core 中使用IHttpClientFactoryASP.NETHTTPclient
- 如何在 ASP.Net Core 中使用 LamarASP.NET
- 如何在 ASP.Net Core 中使用 SerilogASP.NET
- ASP.NET Core - 開篇ASP.NET
- Asp.Net Core SwaggerUI 接入ASP.NETSwaggerUI
- asp.net core 整合JWTASP.NETJWT
- asp.net core 整合 PrometheusASP.NETPrometheus
- ASP.NET Core 中的管道機制ASP.NET
- ASP.NET Core 中的依賴注入ASP.NET依賴注入
- .NET Core學習筆記(9)——Entity Framework Core之Code First筆記Framework
- 【asp.net core 系列】 1 帶你瞭解一下asp.net coreASP.NET
- ASP.net core 使用UEditor.Core 實現 ueditor 上傳功能ASP.NET
- 【轉載】【EF Core】Code first 之使用新資料庫資料庫
- 在ASP.NET Core MVC 2.2 中使用AutoMapperASP.NETMVCAPP
- asp.net core 3.1.x 中使用AutoMapperASP.NETAPP
- ASP.NET Core Blazor 3:使用 Blazor Server (2)ASP.NETBlazorServer
- 在ASP.NET Core中使用brotli壓縮ASP.NET
- 使用 ASP.NET Core 和 MongoDB 建立 Web APIASP.NETMongoDBWebAPI
- 如何在 ASP.NET Core 中使用 API AnalyzerASP.NETAPI
- ASP.Net Core 3.1 使用gRPC入門指南ASP.NETRPC