CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站
一步步教大家如何搭建Asp.Net Core2.0網(wǎng)站,以下所有都是建立在.NETCore2.0環(huán)境已經(jīng)搭建好
右鍵解決方案>新建項目>
選擇Web>ASP.NETCoreWeb應用程序(.NET Core)
選擇Web應用程序,暫時不選擇啟用Docker,身份驗證選擇個人用戶賬戶(會自動生成一系列和用戶認證的代碼)
隨后生代碼層次目錄如下:
其中會包含身份信息的相關實現(xiàn),比如相關實體信息(user)之類的,如果想對擴展微軟自動的生成的用戶實體類,可在Models中的ApplicationUser下擴展,在此ApplicationUser中添加屬性即可:比如添加叫WeChatId屬性,添加后如下:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; namespace DotNetCore20.Web.Models { // Add profile data for application users by adding properties to the ApplicationUser class public class ApplicationUser : IdentityUser { /// <summary> /// 微信Id /// </summary> public string WeChatId { get; set; } } }
在之后生成運行并遷移,數(shù)據(jù)庫的AspNetUsers中就會多出WeChatId 屬性.
一:安裝引用
nugnet恢復引用失效時,可在程序包管理控制臺輸入:
dotnet restore 即可
會發(fā)現(xiàn)在恢復指令后在NuGet中會有一個Microsoft.VisualStudio.Web.CodeGeneration.Design的報錯,信息如下:
已使用“.NETPortable,Version=v0.0,Profile=Profile259, .NETFramework,Version=v4.6.1”而不是項目目標框架“.NETCoreApp,Version=v2.0”還原了包“Microsoft.Composition 1.0.27”。這可能會導致兼容性問題
這個庫是ASP.NET Core的代碼生成工具。包含用于生成控制器和視圖的dotnet-aspnet-codegenerator命令,暫時可先卸載,不影響項目運行.
對項目類庫的引用有以下幾種方式
1.Nuget去安裝(官網(wǎng)https://www.nuget.org/packages/)
2.右鍵依賴項點擊菜單中的添加引用
3.可在程序包管理控制臺輸入:Install-Package引用類庫名稱
4.可右鍵編輯csproj工程文件進行添加,然后執(zhí)行dotnet restore
二.創(chuàng)建實體程序集
右鍵解決方案>添加項目>
首先創(chuàng)建抽象類,供Entity實體繼承,主要為每個實體提供公用屬性
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Runtime.Serialization; using System.Text; namespace DotNetCore20.Entity.Core { /// <summary> /// DB表基底 /// </summary> [Serializable] public abstract partial class BaseEntity { /// <summary> /// Id /// </summary> [DataMember] public long Id { get; set; } /// <summary> /// DB 資料版號 /// </summary> [Timestamp] public byte[] RowVersion { get; set; } /// <summary> /// 創(chuàng)建時間 /// </summary> [DataMember] public DateTime CreateTime { get; set; } /// <summary> /// 更新時間 /// </summary> [DataMember] public DateTime UpdateTime { get; set; } /// <summary> /// 狀態(tài) /// </summary> [DataMember] public EnumState State { get; set; } } /// <summary> /// 狀態(tài) /// </summary> public enum EnumState { /// <summary> /// 刪除 /// </summary> Delete = 1, /// <summary> /// 正常 /// </summary> Normal = 0, } }
添加一個UserExtend用戶擴展類(Entity):
using DotNetCore20.Entity.Core; using System; using System.Runtime.Serialization; namespace DotNetCore20.Entity { [DataContract] public class UserExtend : BaseEntity { /// <summary> /// 用戶Id /// </summary> [DataMember] public long UserId { get; set; } /// <summary> /// 昵稱 /// </summary> [DataMember] public long NickName { get; set; } } }
三.創(chuàng)建數(shù)據(jù)層
添加引用
DAL層需要用到EF實體映射相關和我們自己前面定義的Entity中的UserExtend實體表,所以要添加相關引用,DotNetCore20.Entity和 Microsoft.EntityFrameworkCore.Tools
快捷鍵:Ctrl+Alt+o 打開程序包管理器輸入以下:
install-package Microsoft.EntityFrameworkCore.Tools
如果是網(wǎng)絡限制下載失敗,推薦把nuget鏡像改為博客園資源,方法如下:
右鍵解決方案>管理解決方案的nuget程序包.顯示如下:
新建一個數(shù)據(jù)上下文類,目錄結(jié)構如下:
DotNetCoreDbContext內(nèi)部代碼改為以下:
using DotNetCore20.Entity; using Microsoft.EntityFrameworkCore; namespace DotNetCore20.DAL.DbContext { public class DotNetCoreDbContext : Microsoft.EntityFrameworkCore.DbContext { public DotNetCoreDbContext(DbContextOptions<DotNetCoreDbContext> options) : base(options) { } public DbSet<UserExtend> UserExtend { get; set; } } }
在此基本的實體映射相關的代碼都完畢,現(xiàn)在還有一步,就是數(shù)據(jù)庫連接字符串的配置
首先打開appsettings.json文件,在ConnectionStrings節(jié)點下增加以下
增加后如下:
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetCoreDefaultDb;Trusted_Connection=True;MultipleActiveResultSets=true", "DotNetCoreConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetCoreDb;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "IncludeScopes": false, "Debug": { "LogLevel": { "Default": "Warning" } }, "Console": { "LogLevel": { "Default": "Warning" } } } }
再打開web網(wǎng)站下的Startup文件,在ConfigureServices方法中添加一下行:
//自定義數(shù)據(jù)庫連接字符串 services.AddDbContext<DotNetCoreDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DotNetCoreConnection")));
增加后如下:
using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Http; using Microsoft.EntityFrameworkCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using DotNetCore20.Web.Data; using DotNetCore20.Web.Models; using DotNetCore20.Web.Services; using DotNetCore20.DAL.DbContext; namespace DotNetCore20.Web { public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); //自定義數(shù)據(jù)庫連接字符串 services.AddDbContext<DotNetCoreDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DotNetCoreConnection"))); services.AddIdentity<ApplicationUser, IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>() .AddDefaultTokenProviders(); // Add application services. services.AddTransient<IEmailSender, AuthMessageSender>(); services.AddTransient<ISmsSender, AuthMessageSender>(); services.AddMvc(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); app.UseBrowserLink(); app.UseDatabaseErrorPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseStaticFiles(); app.UseAuthentication(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } } }
運行程序,點擊登陸(只要訪問數(shù)據(jù)庫的操作都可),出現(xiàn)錯誤頁面:
點擊應用遷移,即自動遷移數(shù)據(jù)庫.
由于兩個數(shù)據(jù)庫,只會自動遷移關于用戶的表AspNetUsers,
所以還得VS中程序包管理器中下命令遷移.
Add-Migration firstMigration -Context DotNetCoreDbContext
以上命令執(zhí)行后再執(zhí)行以下命令:
Update-Database -ContextDotNetCoreDbContext;
然后查看數(shù)據(jù)庫會發(fā)現(xiàn)多出兩個數(shù)據(jù)庫,
以DotNetCoreDefaultDb生成的為例,會生成如下表:
其中AspNetUsers就中會有之前添加的WeChatId字段
然后再次運行程序:
這樣一個完整的Asp.NetCore2.0網(wǎng)站就初步運行起來了
下一篇將在DAL層增加Repository和UnitWorks,完成簡單crud的統(tǒng)一管理
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站
這篇文章主要為大家詳細介紹了CodeFirst從零開始搭建Asp.Net Core2.0網(wǎng)站的詳細過程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07C#反射(Reflection)對類的屬性get或set值實現(xiàn)思路
可以使用反射動態(tài)創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象獲取類型并調(diào)用其方法或訪問其字段和屬性,接下來為大家介紹下對一個類別的屬性進行set和get值,感興趣的各位可以參考下哈2013-03-03ASP.NET中常見文件類型、擴展名、存放位置及用途總結(jié)
這篇文章主要介紹了ASP.NET中常見文件類型、擴展名、存放位置及用途總結(jié),ASP.NET中各種擴展名的文件比較多,通過本文可以快速了解它們的作用,需要的朋友可以參考下2014-07-07常用的在數(shù)據(jù)庫中建立無限級樹形菜單的asp.net代碼
經(jīng)常在項目中遇到建立無限級樹形菜單展示的效果,這里簡單地做了一個,基本后臺代碼如下2008-09-09asp.net ASPxTextBox等控件實現(xiàn)"回車模擬Tab"的 常用代碼整理
今天我要實現(xiàn)一些編輯框如ASPxTextBox、ASPxComboBox等控件回車模擬Tab的功能。這沒辦法,用戶用慣了回車,討厭按Tab來移動焦點(鼠標點擊更麻煩)。2010-03-03