CodeFirst從零搭建ASP.NETCore2.0

来源:http://www.cnblogs.com/xiaoliangge/archive/2017/07/10/7133732.html
-Advertisement-
Play Games

沒時間介紹了,廢話不說先上車 以下所有扯淡都是建立在.NETCore2.0環境已經搭建好 右鍵解決方案>新建項目> 選擇Web>ASP.NETCoreWeb應用程式(.NET Core) 選擇Web應用程式,暫時不選擇啟用Docker,身份驗證選擇個人用戶賬戶(會自動生成一系列和用戶認證的代碼) 隨 ...


 

沒時間介紹了,廢話不說先上車

 

 

以下所有扯淡都是建立在.NETCore2.0環境已經搭建好

右鍵解決方案>新建項目>

選擇Web>ASP.NETCoreWeb應用程式(.NET Core)

 選擇Web應用程式,暫時不選擇啟用Docker,身份驗證選擇個人用戶賬戶(會自動生成一系列和用戶認證的代碼)

 隨後生代碼層次目錄如下:

其中會包含身份信息的相關實現,比如相關實體信息(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; }
    }
}

在之後生成運行並遷移,資料庫的AspNetUsers中就會多出WeChatId 屬性.

一:安裝引用

nugnet恢復引用失效時,可在程式包管理控制台輸入:

dotnet restore  即可

 

會發現在恢復指令後在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去安裝(官網https://www.nuget.org/packages/)

2.右鍵依賴項點擊菜單中的添加引用

3.可在程式包管理控制台輸入:Install-Package 引用類庫名稱 

4.可右鍵編輯csproj工程文件進行添加,然後執行dotnet restore 

 

二.創建實體程式集

右鍵解決方案>添加項目>

  

首先創建抽象類,供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>
        /// 創建時間
        /// </summary>
        [DataMember]
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 更新時間
        /// </summary>
        [DataMember]
        public DateTime UpdateTime { get; set; }

        /// <summary>
        /// 狀態
        /// </summary>
        [DataMember]
        public EnumState State { get; set; }
    }

    /// <summary>
    /// 狀態
    /// </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; }

    }
}

三.創建數據層 

 添加引用

DAL層需要用到EF實體映射相關和我們自己前面定義的Entity中的UserExtend實體表,所以要添加相關引用,DotNetCore20.Entity和  Microsoft.EntityFrameworkCore.Tools

快捷鍵:Ctrl+Alt+o 打開程式包管理器輸入以下:

install-package Microsoft.EntityFrameworkCore.Tools

如果是網路限制下載失敗,推薦把nuget鏡像改為博客園資源,方法如下:

右鍵解決方案>管理解決方案的nuget程式包.顯示如下:

新建一個數據上下文類,目錄結構如下:

DotNetCoreDbContext內部代碼改為以下:

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; }
    }
}

在此基本的實體映射相關的代碼都完畢,現在還有一步,就是資料庫連接字元串的配置

首先打開appsettings.json文件,在ConnectionStrings節點下增加以下

"DotNetCoreConnection": "Server=(localdb)\\mssqllocaldb;Database=DotNetCoreDb;Trusted_Connection=True;MultipleActiveResultSets=true"

增加後如下:

{
    "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網站下的Startup文件,在ConfigureServices方法中添加一下行:

//自定義資料庫連接字元串
            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")));

            //自定義資料庫連接字元串
            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?}");
            });
        }
    }
}

 

 運行程式,點擊登陸(只要訪問資料庫的操作都可),出現錯誤頁面:

點擊應用遷移,即自動遷移資料庫.

由於兩個資料庫,只會自動遷移關於用戶的表AspNetUsers,

所以還得VS中程式包管理器中下命令遷移.

Add-Migration firstMigration -Context DotNetCoreDbContext

以上命令執行後再執行以下命令:

Update-Database -Context DotNetCoreDbContext;

然後查看資料庫會發現多出兩個資料庫,

DotNetCoreDefaultDb生成的為例,會生成如下表:

其中AspNetUsers就中會有之前添加的WeChatId欄位

然後再次運行程式:

 

這樣一個完整的 Asp.NetCore2.0網站就初步運行起來了

下一篇將在DAL層增加Repository和UnitWorks,完成簡單crud的統一管理


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Linux系統中文語言亂碼,是很多小伙伴在開始接觸Linux時經常遇到的問題,而且當我們將已在Wndows部署好的項目搬到Linux上運行時,Tomcat的輸出日誌中文全為亂碼(在Windows上正常),看著非常心塞,那麼我們應該怎麼解決呢? 系統中文亂碼 Tomcat輸出日誌中文亂碼 系統環境 C ...
  • 進程的啟動和終止 內核執行c程式時,利用exec函數調用一個特殊的啟動常式,該啟動常式叢內核中獲取命令行參數和環境變數值。 進程終止的情況 5種正常終止的情況: 3種異常終止情況 進程啟動和終止圖 atexit函數 一個進程最多可以登記32和函數(例如:signal函數),這些函數由exit函數自動 ...
  • 1.win+R,然後輸入gpedit.msc打開本地組策略編輯器。 2.打開window設置--安全設置--本地策略--安全選項--找到 用戶帳戶控制: 以管理員批准模式運行所有管理員 和 用戶帳戶控制: 用內置管理員帳戶的管理員批准模式 選擇禁用。 3.然後重啟。 註:本人從網路上http://j ...
  • 把編譯安裝的httpd 實現服務腳本,通過service和chkconfig 進行管理 1 編譯安裝httpd 把httpd編譯安裝在/app/httpd/目錄下。 2 在/etc/rc.d/init.d/目錄下新建一個文件httpd 這個文件的目的在於讓service 命令可以管理編譯安裝的htt ...
  • 概述Docker已經熱了有一兩年了,而且我相信這不是一個曇花一現的技術,而是一個將深遠影響我們日後開發和部署、運營應用系統的一種創新(很多人將其作為devops的一種非常重要的基石)。學習docker的最好方式,莫過於它的官方文檔 ,有興趣 的同學請參考 https://www.docker.com... ...
  • 上一篇博客我講解了TagHelper的基本用法和自定義標簽的生成,那麼我就趁熱打鐵,和大家分享一下TagHelper的高級用法~~,大家也可以在我的博客下隨意留言。 對於初步接觸asp.net core的騷年可以看看我對TagHelper的瞭解和看法: 《asp.net core新特性(1):Tag ...
  • 在這篇文章中,我將介紹在ASP.NET Core MVC中 IControllerActivator 是如何創建控制器的,以及通過依賴註入創建控制器存在的差異。 ...
  • 這是很簡單。。 HTML <div> <input type="file" id="myfile"> <input type="button" value="上傳" onclick="HeadPortraitPicture()"> </div> JS代碼 function HeadPortraitP ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...