国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ASP.NET Core Web API入門之三:使用EF Core

這篇具有很好參考價值的文章主要介紹了ASP.NET Core Web API入門之三:使用EF Core。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、引言

一般來講我們做項(xiàng)目都會用實(shí)體類跟數(shù)據(jù)庫實(shí)體進(jìn)行關(guān)系對應(yīng),這樣的好處方便我們維護(hù)、增刪改查,并且可以減少SQL的編寫,從而統(tǒng)一風(fēng)格,那么 Entity Framework Core 就是很不錯的ORM框架。

二、EF Core 的優(yōu)缺點(diǎn)

2.1 優(yōu)點(diǎn):

1、跨數(shù)據(jù)庫支持能力強(qiáng)大,只需修改配置就可以輕松實(shí)現(xiàn)數(shù)據(jù)庫切換。
2、提升了開發(fā)效率,不需要在編寫Sql腳本,但是有些特殊Sql腳本EF無法實(shí)現(xiàn),需要我們自己編寫(通過EF中的ExecuteSqlCommand實(shí)現(xiàn)插入、修改、刪除、SqlQuery執(zhí)行查詢)。
3、EF提供的模型設(shè)計器十分強(qiáng)大,可以讓我們清晰的指定或者查看表與表之間的關(guān)系(一對多,多對多…)。
4、EF提供的導(dǎo)航屬性十分好用。
5、EF的延遲查詢加載機(jī)制,數(shù)據(jù)在用到的時候才會去數(shù)據(jù)庫查詢。

2.2 缺點(diǎn):

1、性能差(生成Sql腳本階段),在復(fù)雜查詢的時候生成的腳本不是很高。
2、第一次執(zhí)行時會有預(yù)熱,預(yù)熱時性能較差,不過將映射關(guān)系加載到內(nèi)存之后就會好很多。
3、對于大批量的數(shù)據(jù)操作效率比較慢。

三、使用前安裝:NuGet包

  1. Microsoft.EntityFrameworkCore:提供了數(shù)據(jù)上下文和DbSet屬性,我們在程序里面就是通過數(shù)據(jù)上下文和DbSet屬性來對數(shù)據(jù)庫里面的數(shù)據(jù)進(jìn)行操作。
  2. Micorsoft.EntityFrameworkCore.SqlServer:針對SqlServer數(shù)據(jù)庫的擴(kuò)展,使用SqlServer數(shù)據(jù)庫必須。類似的還有MySql,SqlLite等。
  3. Micorsoft.EntityFrameworkCore.Tools:執(zhí)行更新腳本。

四、實(shí)體類更新到數(shù)據(jù)庫實(shí)體表

4.1 創(chuàng)建 DBEntity 屬性

作用:因?yàn)槲蚁M莿討B(tài)將實(shí)體類與數(shù)據(jù)庫實(shí)體表關(guān)聯(lián)關(guān)系建立起來,所以我使用屬性特性的方式來實(shí)現(xiàn),只更新同步有此特性的實(shí)體類到數(shù)據(jù)庫實(shí)體表。
文件目錄:放置在Models/Attribute的目錄下。
ASP.NET Core Web API入門之三:使用EF Core
代碼

/// <summary>
    /// 數(shù)據(jù)庫實(shí)體特性
    /// </summary>
    public class DBEntityAttribute: Attribute
    {

    }

4.2 appsettings.json 配置數(shù)據(jù)庫連接串

"ConnectionStrings": {
    "DemoContext": "Server=127.0.0.1,1433;DataBase=WebApiDemo;User ID=sa;Password=sa;TrustServerCertificate=true;Trust Server Certificate=true;"
  }

4.3 修改 DemoContext 的 OnModelCreating方法、OnConfiguring方法

/// <summary>
        /// 創(chuàng)建實(shí)體
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            #region 動態(tài)加入DbSet<T>屬性

            var assembly = Assembly.GetExecutingAssembly();
            foreach (Type type in assembly.ExportedTypes)
            {
                if (type.IsClass && type.GetCustomAttribute<DBEntityAttribute>() != null)
                {
                    var method = modelBuilder.GetType().GetMethods().Where(x => x.Name == "Entity").FirstOrDefault();   //得到當(dāng)前對象的實(shí)體

                    if (method != null)
                    {
                        //加入DbSet<T>屬性
                        method = method.MakeGenericMethod(new Type[] { type });
                        method.Invoke(modelBuilder, null);
                    }
                }
            }

            #endregion

            base.OnModelCreating(modelBuilder);
        }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            //base.OnConfiguring(optionsBuilder);

            //獲取配置文件對象
            IConfiguration configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json")
                .Build();

            //注入使用DemoContext連接串
            optionsBuilder.UseSqlServer(configuration.GetConnectionString("DemoContext"));
        }

4.4 創(chuàng)建實(shí)體類

基礎(chǔ)類

using System.ComponentModel.DataAnnotations;

namespace ASP.NETCoreApi.Models
{
    public class EntityBase
    {
        /// <summary>
        /// 主鍵
        /// </summary>
        [Key]
        public int FID { get; set; }
    }
}

注:加入 Key 特性,則會在數(shù)據(jù)庫中自動設(shè)置為自增長主鍵。
實(shí)體類主表

using System.ComponentModel.DataAnnotations.Schema;

namespace ASP.NETCoreApi.Models
{
    [DBEntity]
    [Table("T_WDQ_DemoTable")]
    public class DemoTable:EntityBase
    {
        /// <summary>
        /// 姓名
        /// </summary>
        public string FName { get; set; }

        /// <summary>
        /// 編碼
        /// </summary>
        public string FNumber { get; set; }

        /// <summary>
        /// 備注
        /// </summary>
        public string FRemark { get; set; }
    }
}

實(shí)體類子表

using System.ComponentModel.DataAnnotations.Schema;

namespace ASP.NETCoreApi.Models
{
    [DBEntity]
    [Table("T_WDQ_DemoTableEntry")]
    public class DemoTableEntry: EntryEntityBase
    {
        public DemoTable DemoTable { get; set; }

        /// <summary>
        /// 行號
        /// </summary>
        public int FSeq { get; set; }

        /// <summary>
        /// 數(shù)量
        /// </summary>
        public decimal FQty { get; set; }

        /// <summary>
        /// 單價
        /// </summary>
        public decimal FPrice { get; set; }

        /// <summary>
        /// 金額
        /// </summary>
        public decimal FAmount { get; set; }
    }
}

4.5 更新數(shù)據(jù)庫實(shí)體表

需要在程序包管理器控制臺里執(zhí)行同步更新的命令腳本,打開方式:
ASP.NET Core Web API入門之三:使用EF Core
在執(zhí)行命令前,我們先要了解一下命令的使用,要做到知其然,知其所以然。

  • 命令:
    Add-Migration [operateName]:添加遷移,每次遷移前必須先執(zhí)行該命令。
    [operateName]:操作名,例如:初始化時使用 Initial 命令,新增字段時使用 AddField 命令。
    Update-Database:更新數(shù)據(jù)庫,更新新實(shí)體表/字段時執(zhí)行。
    script-migration:執(zhí)行該命令后,會根據(jù)最新的遷移文件生成SQL腳本(刪除/修改字段),主要是用于生成SQL腳本后校驗(yàn)要刪除/修改的字段是否正確,校驗(yàn)通過后再到生產(chǎn)環(huán)境中執(zhí)行該SQL腳本。

:每次只能執(zhí)行一個命令,不允許多個命令同時執(zhí)行。

初始化:

Add-Migration Initial

ASP.NET Core Web API入門之三:使用EF Core
更新數(shù)據(jù)庫:

Update-Database

ASP.NET Core Web API入門之三:使用EF Core

五、EF Core 使用增刪改查

具體的使用自行百度吧,這里就不再做闡述了。

六、結(jié)果

ASP.NET Core Web API入門之三:使用EF Core

結(jié)語:其實(shí)我是想使用動態(tài)更新實(shí)體對象與數(shù)據(jù)庫實(shí)體表字段的,但是找了很久沒有解決辦法,就逼不得已先手敲命令行的方式來進(jìn)行更新吧。文章來源地址http://www.zghlxwxcb.cn/news/detail-497597.html

到了這里,關(guān)于ASP.NET Core Web API入門之三:使用EF Core的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ASP.NET Core 中的兩種 Web API

    ASP.NET Core 有兩種創(chuàng)建 RESTful Web API 的方式: 基于 Controller,使用完整的基于ControllerBase的基類定義接口endpoints。 基于 Minimal APIs,使用Lambda表達(dá)式定義接口 endpoints。 基于 Controller 的 Web API 可以使用構(gòu)造函數(shù)注入,或者屬性注入,遵循面向?qū)ο竽J健?基于 Minimal APIs 的 Web API 通

    2024年02月09日
    瀏覽(34)
  • ASP.NET Core Web API 流式返回,逐字顯示

    ASP.NET Core Web API 流式返回,逐字顯示

    Websocket、SSE(Server-Sent Events)和長輪詢(Long Polling)都是用于網(wǎng)頁和服務(wù)端通信的技術(shù)。 Websocket是一種全雙工通信協(xié)議,能夠?qū)崿F(xiàn)客戶端和服務(wù)端之間的實(shí)時通信。它基于TCP協(xié)議,并且允許服務(wù)器主動向客戶端推送數(shù)據(jù),同時也允許客戶端向服務(wù)器發(fā)送數(shù)據(jù)。 SSE是一種單向

    2023年04月23日
    瀏覽(21)
  • ASP.NET Core Web API之Token驗(yàn)證

    ASP.NET Core Web API之Token驗(yàn)證

    在實(shí)際開發(fā)中,我們經(jīng)常需要對外提供接口以便客戶獲取數(shù)據(jù),由于數(shù)據(jù)屬于私密信息,并不能隨意供其他人訪問,所以就需要驗(yàn)證客戶身份。那么如何才能驗(yàn)證客戶的什么呢?今天以一個簡單的小例子,簡述ASP.NET Core Web API開發(fā)過程中,常用的一種JWT身份驗(yàn)證方式。僅供學(xué)

    2024年02月11日
    瀏覽(22)
  • 2.1 .net 8 ASP.NET Core Web API - Controller詳解

    2.1 .net 8 ASP.NET Core Web API - Controller詳解

    書接上回,上節(jié)我們留了幾個問題,即: 1、接口Hello的名字究竟怎么來的? 2、我們?nèi)绻氚呀涌诟某善渌拿Q,應(yīng)該怎么做? 3、我們繼承ControllerBase,以及[Route(“[controller]”)]屬性,又是分別起到什么作用? 需要解決以上幾個問題,我們就要繼續(xù)深入研究Controller相關(guān)的

    2024年02月20日
    瀏覽(21)
  • ASP.NET Core 中基于 Controller 的 Web API

    ASP.NET Core 中基于 Controller 的 Web API

    客戶端發(fā)送Http請求,Contoller響應(yīng)請求,并從數(shù)據(jù)庫讀取數(shù)據(jù),序列化數(shù)據(jù),然后通過 Http Response返回序列化的數(shù)據(jù)。 Web API 的所有controllers 一般繼承于 ControllerBase 類,而不是Controller 類。 因?yàn)?Controller 類也繼承自ControllerBase 類,但是支持views,而API一般不需要這個功能。 Co

    2024年02月10日
    瀏覽(29)
  • 在 ASP.NET Core Web API 中處理 Patch 請求

    PUT 和 PATCH 方法用于更新現(xiàn)有資源。 它們之間的區(qū)別是,PUT 會替換整個資源,而 PATCH 僅指定更改。 在 ASP.NET Core Web API 中,由于 C# 是一種靜態(tài)語言( dynamic 在此不表),當(dāng)我們定義了一個類型用于接收 HTTP Patch 請求參數(shù)的時候,在 Action 中無法直接從實(shí)例中得知客戶端提供了哪

    2024年02月04日
    瀏覽(97)
  • ASP.Net Core Web API結(jié)合Entity Framework Core框架(API的創(chuàng)建使用,接口前端權(quán)限設(shè)置,前端獲取API的Get,post方法)(程序包引用以及導(dǎo)入數(shù)據(jù)庫)

    ASP.Net Core Web API結(jié)合Entity Framework Core框架(API的創(chuàng)建使用,接口前端權(quán)限設(shè)置,前端獲取API的Get,post方法)(程序包引用以及導(dǎo)入數(shù)據(jù)庫)

    目錄 1. Web Api 程序包引用 2. Web Api 的創(chuàng)建與Http類型的介紹 2.1?ASP.Net Core Web API項(xiàng)目的創(chuàng)建 2?.2? API接口的創(chuàng)建 2.3?HttpGet和HttpPost類型的區(qū)別 3.接口權(quán)限設(shè)置 4.HttpGet方法和HttpPOst方法 5.前端中用HttpGet/Poset獲取接口數(shù)據(jù) 6.EF框架——配置數(shù)據(jù)庫鏈接字符串(即將數(shù)據(jù)庫中的表導(dǎo)入項(xiàng)

    2024年02月08日
    瀏覽(31)
  • ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    ASP.NET Core 的 Web Api 實(shí)現(xiàn)限流 中間件

    Microsoft.AspNetCore.RateLimiting ?中間件提供速率限制(限流)中間件。 它是.NET 7 以上版本才支持的中間件,剛看了一下,確實(shí)挺好用,下面給大家簡單介紹一下: RateLimiterOptionsExtensions?類提供下列用于限制速率的擴(kuò)展方法:????? 固定窗口限制器 滑動窗口限制器 令牌桶限

    2024年01月17日
    瀏覽(18)
  • ASP.NET Core 中基于 Minimal APIs 的Web API

    Minimal APIs 是ASP.NET Core中快速構(gòu)建 REST API 的方式,可以用最少的代碼構(gòu)建全功能的REST API。比如下面三行代碼: 可以實(shí)現(xiàn)在請求網(wǎng)站根目錄結(jié)點(diǎn)的時候,返回\\\"Hello World!\\\"。 這種方式的Web API可以用于構(gòu)建微服務(wù),極簡功能的網(wǎng)站。 下面代碼,將幾個 HTTP 請求的 url映射到 Lambda

    2024年02月10日
    瀏覽(24)
  • ASP.NET Core Web API 流式返回,實(shí)現(xiàn)ChatGPT逐字顯示

    ASP.NET Core Web API 流式返回,實(shí)現(xiàn)ChatGPT逐字顯示

    ??作者:科技、互聯(lián)網(wǎng)行業(yè)優(yōu)質(zhì)創(chuàng)作者 ??專注領(lǐng)域:.Net技術(shù)、軟件架構(gòu)、人工智能、數(shù)字化轉(zhuǎn)型、DeveloperSharp、微服務(wù)、工業(yè)互聯(lián)網(wǎng)、智能制造 ??歡迎關(guān)注我(Net數(shù)字智慧化基地),里面有很多 高價值 技術(shù)文章, 是你刻苦努力也積累不到的經(jīng)驗(yàn) ,能助你快速成長。升職

    2024年02月22日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包