asp.net core 系列 20 EF基於數據模型創建資料庫

来源:https://www.cnblogs.com/MrHSR/archive/2019/02/12/10333073.html
-Advertisement-
Play Games

一.概述 本章使用 Entity Framework Core 構建執行基本數據訪問的 ASP.NET Core MVC 應用程式。使用遷移(migrations)基於數據模型創建資料庫,是一種code first模式。可以在Windows 上使用 Visual Studio 2017,或在 Win ...


一.概述

  本章使用 Entity Framework Core 構建執行基本數據訪問的 ASP.NET Core MVC 應用程式。使用遷移(migrations)基於數據模型創建資料庫,是一種code first模式。可以在Windows 上使用 Visual Studio 2017,或在 Windows、macOS 或 Linux 上使用 .NET Core CLI 來學習。已經安裝了NET Core 2.1 SDK,這裡使用Visual Studio 2017和sql server 2012演示。

 

  1.1 創建新項目  

    (1) 打開 Visual Studio 2017

    (2) 選擇 ASP.NET Core Web 應用程式。

    (3) 輸入 EFGetStarted.AspNetCore.NewDb 作為名稱。

    (4) 在新建 ASP.NET Core Web 應用程式 對話框中:

      確保在下拉列表中選擇“.NET Core”和“ASP.NET Core 2.2”

      選擇“Web 應用程式(模型視圖控制器)”項目模板

      確保將“身份驗證”設置為“無身份驗證”

    (5) 編譯

       出錯:“任務不支持“SharedCompilationId”參數。請確認該參數存在於此任務中” ,安裝如下:                     

        PM> install-package  Microsoft.Net.Compilers

 

  1.2 安裝 Entity Framework Core

    要安裝 EF Core,需要把目標對象的 EF Core 資料庫提供程式安裝。本篇使用SQL Server資料庫,需要安裝 SQL Server 提供程式包。

    install-package Microsoft.EntityFrameworkCore.SqlServer -Version 2.2.0

 

  1.3 創建模型

    右鍵單擊“Models”文件夾,然後選擇“添加”>“類。輸入“Model.cs”作為名稱。

    /// <summary>
    /// 創建模型
    /// using Microsoft.EntityFrameworkCore;
    /// </summary>
    public class BloggingContext : DbContext
    {
        public BloggingContext(DbContextOptions<BloggingContext> options)
            : base(options)
        { }

        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Post> Posts { get; set; }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Url { get; set; }

        public ICollection<Post> Posts { get; set; }
    }

    public class Post
    {
        public int PostId { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }

        public int BlogId { get; set; }
        public Blog Blog { get; set; }
    }

  

  1.4 使用依賴註入註冊上下文

    服務(例如 BloggingContext)在應用程式啟動期間通過依賴關係註入進行註冊。 需要這些服務的組件(如 MVC 控制器)可以通過向構造函數或屬性添加相關參數來獲得對應服務。

        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
            /*
              using EFGetStarted.AspNetCore.NewDb.Models;
              using Microsoft.EntityFrameworkCore; 
             */
                     var connection = "Data Source = {ip};Initial Catalog = EFGetStarted.AspNetCore.NewDb; User ID = hsr;Password =js*2015;";     
                      vices.AddDbContext<BloggingContext>
                (options => options.UseSqlServer(connection));
        }

    上面通過services.AddDbContext< BloggingContext)服務註入到容器中,並使用UseSqlServer 連接方式。我在sql 2012中已手動建立了EFGetStarted.AspNetCore.NewDb庫。在生產應用中,通常會將連接字元串放在配置文件或環境變數中。 為簡單起見,本篇在代碼中定義它。

 

  1.5 創建資料庫

    以下步驟使用遷移Migration創建資料庫。根據上面1.3以有的模型。在工具”>“NuGet 包管理器”>“包管理器控制台”,運行以下命令:

   PM> Add-Migration InitialCreate
    The Entity Framework Core Package Manager Console Tools don't support PowerShell version 2.0. Upgrade to PowerShell version 3.0 or higher, 
    restart Visual Studio, and try again.

           解決方案: https://blog.csdn.net/lilinoscar/article/details/81739770

    PM> Add-Migration InitialCreate
        Microsoft.EntityFrameworkCore.Infrastructure[10403]
              Entity Framework Core 2.2.1-servicing-10028 initialized 'BloggingContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' 
     with options: None
     To undo this action, use Remove
-Migration.

      在vs 2017當前項目結構中查看,自動生成二個.cs類, 如下所示:

        

       PM> Update-Database

        

    Add-Migration 命令為遷移搭建基架,以便為模型創建一組初始表。 Update-Database 命令創建資料庫並向其應用新的遷移。

 

  1.6 創建控制器

     生成 Blogs實體 控制器和視圖。右鍵單擊“控制器”文件夾,然後選擇“添加”>“控制器”

   public class BlogsController : Controller
    {

        public BloggingContext BloggingContext { get; }

        public BlogsController(BloggingContext bloggingContext)
        {
            this.BloggingContext = bloggingContext;
        }

        // GET: /<controller>/
        public IActionResult Index()
        {
            return View();
        }

        [HttpGet]
        public IActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public async Task<IActionResult> Create([Bind("Url")] Blog blog)
        {
            BloggingContext.Add<Blog>(blog);
            await BloggingContext.SaveChangesAsync();
            return View();
        }
    }

  

  1.7 創建視圖

    新建視圖,結構目錄是:Views-- Blogs-- Create.cshtml

    @model EFGetStarted.AspNetCore.NewDb.Models.Blog;

    @{
    <form asp-controller="Blogs" asp-action="Create" method="post" >
        <p>
            url: <input type="text" asp-for="Url" />
            <input type="submit" value="Create" />
        </p>
    </form>
    }

 

   演示如下,點擊create按鈕,非同步調用後臺控制器Blogs下的Create的HttpPost特性方法。插入一條數據到Blogs數據表中。

 

 

  參考文獻:

    官方文檔:ASP.NET Core 新建資料庫 

 


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

-Advertisement-
Play Games
更多相關文章
  • 轉載自如下鏈接: https://www.cnblogs.com/xpvincent/p/9334851.html 字體實在是太小了,我看著好鬧心,就複製過來自己放大下,謝謝。 標準控制項1 btn Button2 chk CheckBox3 ckl CheckedListBox4 cmb Combo ...
  • Why?為什麼使用反射 MVC ORM EF 都是用的反射。反射可以讓程式的擴展性,靈活性得到加強。一起即可動態創建 what 反射原理 動態載入類庫 ,先添加引用類庫,或者複製debug裡面的文件dll到運行文件Debug Assembly assembly = Assembly.Load("We ...
  • 目前我們的.NET Core實戰項目之CMS系列教程基本走到尾聲了,通過這一系列的學習你應該能夠輕鬆應對.NET Core的日常開發了!當然這個CMS系統的一些邏輯處理還需要優化,如沒有引入日誌組件以及緩存功能,許可權目前只支持控制到菜單,卻沒有控制到具體的功能(其實這塊只是苦於樣式不會處理,不然的話 ...
  • 之前項目在測試伺服器上的一些介面時不時會報出下麵的錯誤:(採用Abp框架) "SocketException: 你的主機中的軟體中止了一個已建立的連接。 STACK TRACE: at MySqlConnector.Protocol.Serialization.SocketByteHandler.W ...
  • var connection = new HubConnectionBuilder().WithUrl(serverUrl, option => { option.HttpMessageHandlerFactory = (handler) => { var ne... ...
  • 發現之前寫了一篇關於事件的闡述寫的過於抽象。現在想想先理解本質由簡入難比較合適 之前的一篇博客地址:https://www.cnblogs.com/LiMin/p/7212217.html 參照網上例子給個簡單版本的如下:貓叫->老鼠跑了->主人醒了 ...
  • Socket是一種通信TCP/IP的通訊介面,也就是HTTP的抽象層,就是Socket在Http之上,Socket也就是發動機。實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或 ...
  • 前段時間開發公司官網,用到了URLRewriter實現偽靜態,在VS調試模式下沒有任何問題,部署到IIS上後總是提示404的錯誤,查了很久才知道IIS需要做相應的配置才能實現動態跳轉的功能,現將IIS偽靜態配置方法記錄下來,希望對有需要的人有所幫助。 一、首先,要實現IIS偽靜態,最好打開IIS下的 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...