日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
.NETCore數(shù)據(jù)庫連接簡介(.netcore數(shù)據(jù)庫連接)

在進(jìn)行 .NET Core 開發(fā)時(shí),經(jīng)常需要操作數(shù)據(jù)庫以完成數(shù)據(jù)的存儲(chǔ)和讀取。因此,對(duì)于數(shù)據(jù)庫的連接是非常必要的。在本篇文章中,我們將介紹使用 .NET Core 連接和操作關(guān)系型數(shù)據(jù)庫的基礎(chǔ)知識(shí)。

成都創(chuàng)新互聯(lián)長期為近1000家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為盤山企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、網(wǎng)站制作,盤山網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。

一、關(guān)系型數(shù)據(jù)庫

關(guān)系型數(shù)據(jù)庫是一種基于關(guān)系模型的數(shù)據(jù)存儲(chǔ)方式,使用了表的概念來管理數(shù)據(jù)。這些表是由行和列組成的,并且每個(gè)表都有一個(gè)主鍵來唯一標(biāo)識(shí)它們的每個(gè)行。關(guān)系型數(shù)據(jù)庫最常用的類型是 SQL Server、MySQL、PostgreSQL、Oracle等。

二、.net core 數(shù)據(jù)庫連接

在 .NET Core 中,可以通過一些特殊的類和方法來連接關(guān)系型數(shù)據(jù)庫。這些類和方法將對(duì)數(shù)據(jù)庫進(jìn)行操作,包括創(chuàng)建和刪除數(shù)據(jù)庫,執(zhí)行 SQL 查詢等。

需要在 .NET Core 項(xiàng)目中添加對(duì)應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)包。以 MySQL 數(shù)據(jù)庫為例,在項(xiàng)目中安裝 “MySql.Data.EntityFrameworkCore” 包即可。在安裝完成后,需要配置數(shù)據(jù)庫連接信息,這些信息包括數(shù)據(jù)源名稱、主機(jī)名、端口號(hào)、用戶名和密碼等。這些信息將被用于連接到數(shù)據(jù)庫和執(zhí)行數(shù)據(jù)庫操作。

下面是一個(gè)示例,展示如何在 .NET Core 項(xiàng)目中使用 MySQL 數(shù)據(jù)庫。

1. 引入命名空間

首先需要在項(xiàng)目中引入 MySql.Data.EntityFrameworkCore 命名空間,該命名空間包含一些操作 MySQL 數(shù)據(jù)庫的類和方法,可以幫助我們連接和操作 MySQL 數(shù)據(jù)庫。

“`csharp

using MySql.Data.EntityFrameworkCore;

“`

2. 配置數(shù)據(jù)庫連接

在 appsettings.json 文件中添加對(duì) MySQL 數(shù)據(jù)庫連接的配置,并在 Startup.cs 中調(diào)用 ConfigureServices 方法進(jìn)行數(shù)據(jù)庫配置信息的注冊。

“`json

{

“ConnectionStrings”: {

“DefaultConnection”: “server=localhost;port=3306;database=mydb;uid=root;password=123456”

}

}

“`

“`csharp

public void ConfigureServices(IServiceCollection services)

{

var connectionString = Configuration.GetConnectionString(“DefaultConnection”);

services.AddDbContext(options => options.UseMySQL(connectionString));

}

“`

這里我們使用了 AddDbContext 方法注冊數(shù)據(jù)庫上下文,且指定了使用 MySQL 數(shù)據(jù)庫,還指定了數(shù)據(jù)庫連接字符串。

3. 編寫數(shù)據(jù)模型

在 .NET Core 中,可以通過定義數(shù)據(jù)模型來操作數(shù)據(jù)庫??梢允褂?Code First 提供的 Fluent API 來定義與處理數(shù)據(jù)模型。下面是一個(gè)示例:

“`csharp

public class Product

{

public int Id { get; set; }

public string Name { get; set; }

public decimal Price { get; set; }

public string Description { get; set; }

}

“`

4. 創(chuàng)建數(shù)據(jù)庫遷移

創(chuàng)建完數(shù)據(jù)模型后,需要使用 EF Core 的 Migration 工具生成數(shù)據(jù)庫表。只要執(zhí)行命令,將會(huì)在 MySQL 數(shù)據(jù)庫中生成 Product 表。

“`bash

dotnet ef migrations add initial

dotnet ef database update

“`

5. 執(zhí)行數(shù)據(jù)庫操作

完成上述步驟后,我們就可以使用 MyDbContext 這個(gè)類來拿到 MySQL 數(shù)據(jù)庫中的 Product 表的數(shù)據(jù)了。執(zhí)行以下代碼段,即可插入一條 Product 記錄:

“`csharp

using (var db = new MyDbContext())

{

db.Products.Add(new Product

{

Name = “Apple iPhone XR”,

Price = 6999,

Description = “Apple 最新款智能手機(jī)”

});

db.SaveChanges();

}

“`

以上步驟中,使用了 Fluent API 來定義數(shù)據(jù)模型,生成在 MySQL 數(shù)據(jù)庫中的表,以及操作數(shù)據(jù)庫。

三、

成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220

ASP.NET Core 中的模型綁定

控制器 Razor 和頁面處理來自 HTTP 請(qǐng)求的數(shù)據(jù)。 例如,路由數(shù)據(jù)可以提供一個(gè)記錄鍵,而發(fā)布的表單域可以為模型的屬性提供一個(gè)值。 編寫代碼以檢索這些值,并將其從字符串轉(zhuǎn)換為 .NET 類型不僅繁瑣,而且還容易出錯(cuò)。 模型綁定后會(huì)自動(dòng)化該過程。 模型綁定系統(tǒng):

假設(shè)有以下操戚御悉作方法:

并且應(yīng)用收到一個(gè)帶有以下消息 URL 的請(qǐng)求:

在路由系統(tǒng)選擇該操作方法之后,模型綁定執(zhí)行以下步驟:

然后,該框架會(huì)調(diào)用 GetById 方法,為 id 參數(shù)傳入 2,并為 dogsOnly 參數(shù)傳入 true。

在前面的示例中,模型綁定目標(biāo)是簡單類型的方法參數(shù)。 目標(biāo)也可以是復(fù)雜類型的屬性。 成功綁定每個(gè)屬性后,將對(duì)屬性進(jìn)行模型驗(yàn)證。 有關(guān)綁定到模型的數(shù)據(jù)以及任意綁定或驗(yàn)證錯(cuò)誤的記錄都存儲(chǔ)在 ControllerBase.ModelState 或 PageModel.ModelState 中。 為查明該過程是否已成功,應(yīng)用會(huì)檢查 ModelState.IsValid 標(biāo)志。

模型綁定嘗試查找以下類型目標(biāo)的值:

可應(yīng)用于控制器或 PageModel 類的公共屬性,從而使模型綁定以該屬性為目標(biāo):

可在 ASP.NET Core 2.1 及更高版本中獲得。 可應(yīng)用于控制器或 PageModel 類,以使模型綁定以該類的所有公共屬性為目標(biāo):

默認(rèn)情況下,不綁定 HTTP GET 請(qǐng)求的屬性。 通常,GET 請(qǐng)求只需一個(gè)記錄 ID 參數(shù)。 記錄 ID 用于查找數(shù)據(jù)庫中的數(shù)據(jù)。 因此,無需綁定包含模型實(shí)例的屬性。 只需要將屬性綁定到 GET 請(qǐng)求中的數(shù)據(jù)的情況下,請(qǐng)將 SupportsGet 屬性設(shè)置為 true:

默認(rèn)情況下,模型綁定以鍵值對(duì)的形式出現(xiàn) HTTP 請(qǐng)求從以下源中獲取數(shù)據(jù):

對(duì)于每個(gè)目標(biāo)參數(shù)或?qū)傩?,按照之前列表中指示的順序掃描清楚?有幾個(gè)例外情況:

如果默認(rèn)源不正確,請(qǐng)使用下列屬性之一來指定源:

這些屬性:

將 特性應(yīng)用于一個(gè)參數(shù),以便從一個(gè) HTTP 請(qǐng)求的正文填充其屬性。 ASP.NET Core 運(yùn)行時(shí)將讀取正文的責(zé)任委托給輸入格式化程序。 輸入格式化程序的解釋位于本文后面部分。

將 應(yīng)用于復(fù)雜類型參數(shù)時(shí),應(yīng)用于其屬性的任何綁定源屬性都將被忽略。 例如,以下 Create 操作指定從正文填充其 pet 參數(shù):

Pet 類指定從查詢字符串參數(shù)填充其 Breed 屬性:

在上面的示例中:

輸入格式化程序只讀取正文,不了解綁定源特性。 如果在正文中找到合適的值,則使用該值填充 Breed 屬性。

不要將 應(yīng)用于每個(gè)操作方法的多個(gè)參數(shù)。 輸入格式化程序讀取請(qǐng)求流后,無法再次讀取該高乎流以綁定其他 參數(shù)。

源數(shù)據(jù)由“值提供程序”拆閉提供給模型綁定系統(tǒng)。 你可以編寫并注冊自定義值提供程序,這些提供程序從其他源中獲取用于模型綁定的數(shù)據(jù)。 例如,你可能希望數(shù)據(jù)來自 cookie 或 會(huì)話狀態(tài)。 要從新的源中獲取數(shù)據(jù),請(qǐng)執(zhí)行以下操作:

示例應(yīng)用包括從獲取值的值提供程序和工廠 cookie 示例。 以下是 Startup.ConfigureServices 中的注冊代碼:

所示代碼將自定義值提供程序置于所有內(nèi)置值提供程序之后。 要將其置于列表中的首位,請(qǐng)調(diào)用 Insert(0, new CookieValueProviderFactory()) 而不是 Add。

默認(rèn)情況下,如果找不到模型屬性的值,則不會(huì)創(chuàng)建模型狀態(tài)錯(cuò)誤。 該屬性設(shè)置為 NULL 或默認(rèn)值:

如果在模型屬性的窗體字段中未找到任何內(nèi)容時(shí)模型狀態(tài)應(yīng)失效,請(qǐng)使用 特性。

請(qǐng)注意,此 行為適用于發(fā)布的表單數(shù)據(jù)中的模型綁定,而不適用于請(qǐng)求正文中的 ON 或 XML 數(shù)據(jù)。 請(qǐng)求正文數(shù)據(jù)由輸入格式化程序進(jìn)行處理。

如果找到源,但無法將其轉(zhuǎn)換為目標(biāo)類型,則模型狀態(tài)將被標(biāo)記為無效。 目標(biāo)參數(shù)或?qū)傩栽O(shè)置為 NULL 或默認(rèn)值,如上一部分所述。

在具有 屬性的 API 控制器中,無效的模型狀態(tài)會(huì)導(dǎo)致自動(dòng) HTTP 400 響應(yīng)。

在 Razor 頁面中,重新顯示頁面并顯示一條錯(cuò)誤消息:

客戶端驗(yàn)證將捕獲大多數(shù)提交到 Razor 頁面窗體的錯(cuò)誤數(shù)據(jù)。 此驗(yàn)證使得先前突出顯示的代碼難以被觸發(fā)。 示例應(yīng)用包含一個(gè)“提交無效日期”按鈕,該按鈕將錯(cuò)誤數(shù)據(jù)置于“雇用日期”字段中并提交表單。 此按鈕顯示在發(fā)生數(shù)據(jù)轉(zhuǎn)換錯(cuò)誤時(shí)用于重新顯示頁的代碼將如何工作。

在使用先前的代碼重新顯示頁時(shí),表單域中不會(huì)顯示無效的輸入。 這是因?yàn)槟P蛯傩砸言O(shè)置為 NULL 或默認(rèn)值。 無效輸入會(huì)出現(xiàn)在錯(cuò)誤消息中。 但是,如果要在表單域中重新顯示錯(cuò)誤數(shù)據(jù),可以考慮將模型屬性設(shè)置為字符串并手動(dòng)執(zhí)行數(shù)據(jù)轉(zhuǎn)換。

如果不希望發(fā)生類型轉(zhuǎn)換錯(cuò)誤導(dǎo)致模型狀態(tài)錯(cuò)誤的情況,建議使用相同的策略。 在這種情況下,將模型屬性設(shè)置為字符串。

模型綁定器可以將源字符串轉(zhuǎn)換為以下簡單類型:

復(fù)雜類型必須具有要綁定的公共默認(rèn)構(gòu)造函數(shù)和公共可寫屬性。 進(jìn)行模型綁定時(shí),將使用公共默認(rèn)構(gòu)造函數(shù)來實(shí)例化類。

對(duì)于復(fù)雜類型的每個(gè)屬性,模型綁定會(huì)查找名稱模式 prefix.property_name 的源。 如果未找到,它將僅查找不含前綴的 properties_name。

對(duì)于綁定到參數(shù),前綴是參數(shù)名稱。 對(duì)于綁定到 PageModel 公共屬性,前綴是公共屬性名稱。 某些屬性具有 Prefix 屬性,讓你可以替代參數(shù)或?qū)傩悦Q的默認(rèn)用法。

例如,假設(shè)復(fù)雜類型是以下 Instructor 類:

如果要綁定的模型是一個(gè)名為 instructorToUpdate 的參數(shù):

模型綁定從查找鍵 instructorToUpdate.ID 的源開始操作。 如果未找到,它將查找不含前綴的 ID。

如果要綁定的模型是控制器或 PageModel 類的一個(gè)名為 Instructor 的屬性:

模型綁定從查找鍵 Instructor.ID 的源開始操作。 如果未找到,它將查找不含前綴的 ID。

如果要綁定的模型是名為 instructorToUpdate 的參數(shù),并且 Bind 屬性指定 Instructor 作為前綴:

模型綁定從查找鍵 Instructor.ID 的源開始操作。 如果未找到,它將查找不含前綴的 ID。

多個(gè)內(nèi)置屬性可用于控制復(fù)雜類型的模型綁定:

警告

如果發(fā)布的表單數(shù)據(jù)是值的源,則這些屬性會(huì)影響模型綁定。 它們

影響輸入格式化程序,后者處理已發(fā)布的 ON 和 XML 請(qǐng)求正文。 輸入格式化程序的解釋位于本文后面部分。

可應(yīng)用于類或方法參數(shù)。 指定模型綁定中應(yīng)包含的模型屬性。 不

影響輸入

格式化程序。

在下面的示例中,當(dāng)調(diào)用任意處理程序或操作方法時(shí),只綁定 Instructor 模型的指定屬性:

在下面的示例中,當(dāng)調(diào)用 OnPost 方法時(shí),只綁定 Instructor 模型的指定屬性:

屬性可用于防止“創(chuàng)建”方案中的過多發(fā)布情況。 由于排除的屬性設(shè)置為 NULL 或默認(rèn)值,而不是保持不變,因此它在編輯方案中無法很好地工作。 為防止過多發(fā)布,建議使用視圖模型,而不是使用 屬性。 有關(guān)詳細(xì)信息,請(qǐng)參閱有關(guān)過多發(fā)布的安全性說明。

ModelBinderAttribute 可應(yīng)用于類型、屬性或參數(shù)。 它允許指定用于綁定特定實(shí)例或類型的模型綁定器的類型。 例如:

當(dāng)屬性或參數(shù)處于模型綁定時(shí),該屬性還可用于更改屬性或參數(shù)的名稱:

只能應(yīng)用于模型屬性,不能應(yīng)用于方法參數(shù)。 如果無法對(duì)模型屬性進(jìn)行綁定,則會(huì)導(dǎo)致模型綁定添加模型狀態(tài)錯(cuò)誤。 下面是一個(gè)示例:

另請(qǐng)參閱模型驗(yàn)證中針對(duì) 屬性的討論。

只能應(yīng)用于模型屬性,不能應(yīng)用于方法參數(shù)。 防止模型綁定設(shè)置模型的屬性。 下面是一個(gè)示例:

對(duì)于是簡單類型的目標(biāo),模型綁定將查找 parameter_name 或 property_name 的匹配項(xiàng)。 如果找不到匹配項(xiàng),它將查找某種不含前綴的受支持的格式。 例如:

對(duì)于 Dictionary 目標(biāo),模型綁定會(huì)查找 parameter_name 或 property_name 的匹配項(xiàng)。 如果找不到匹配項(xiàng),它將查找某種不含前綴的受支持的格式。 例如:

模型綁定要求復(fù)雜類型具有無參數(shù)的構(gòu)造函數(shù)。 System.Text.Json和 Newtonsoft.Json 基于的輸入格式化程序都支持對(duì)不具有無參數(shù)構(gòu)造函數(shù)的類進(jìn)行反序列化。

C # 9 引入了記錄類型,這是一個(gè)很好的方法,可以在網(wǎng)絡(luò)上簡潔地表示數(shù)據(jù)。 ASP.NET Core 增加了對(duì)模型綁定和使用單個(gè)構(gòu)造函數(shù)驗(yàn)證記錄類型的支持:

Person/Index.cshtml:

在驗(yàn)證記錄類型時(shí),運(yùn)行時(shí)將搜索專用于參數(shù)而不是屬性的綁定和驗(yàn)證元數(shù)據(jù)。

該框架允許綁定到記錄類型并對(duì)其進(jìn)行驗(yàn)證:

若要運(yùn)行上述操作,類型必須:

不能綁定沒有無參數(shù)構(gòu)造函數(shù)的 Poco。

下面的代碼會(huì)引發(fā)異常,指出類型必須具有無參數(shù)的構(gòu)造函數(shù):

具有類似于主構(gòu)造函數(shù)的手動(dòng)創(chuàng)作構(gòu)造函數(shù)的記錄類型工作

對(duì)于記錄類型,使用參數(shù)上的驗(yàn)證和綁定元數(shù)據(jù)。 忽略屬性上的任何元數(shù)據(jù)

驗(yàn)證使用參數(shù)的元數(shù)據(jù),但使用屬性來讀取值。 在帶有主構(gòu)造函數(shù)的普通情況下,兩者都是相同的。 不過,有幾種方法可以實(shí)現(xiàn)此操作:

在這種情況下,MVC 不會(huì)嘗試 Name 重新綁定。 但 Age 允許更新

ASP.NET Core 路由值提供程序和查詢字符串值提供程序:

相反,來自窗體數(shù)據(jù)的值要進(jìn)行區(qū)分區(qū)域性的轉(zhuǎn)換。 這是設(shè)計(jì)使然,目的是讓 URL 可在各個(gè)區(qū)域設(shè)置享。

使 ASP.NET Core 路由值提供程序和查詢字符串值提供程序進(jìn)行區(qū)分區(qū)域性的轉(zhuǎn)換:

模型綁定可以處理某些特殊的數(shù)據(jù)類型。

HTTP 請(qǐng)求中包含的上傳文件。 還支持多個(gè)文件的 IEnumerable 。

操作可以選擇將 CancellationToken 作為參數(shù)綁定。 這會(huì)將信號(hào)綁定到 RequestAborted HTTP 請(qǐng)求的基礎(chǔ)的連接中止時(shí)。 操作可以使用此參數(shù)來取消長時(shí)間運(yùn)行的異步操作,這些操作將作為控制器操作的一部分執(zhí)行。

用于從發(fā)布的表單數(shù)據(jù)中檢索所有的值。

請(qǐng)求正文中的數(shù)據(jù)可以是 ON、XML 或其他某種格式。 要分析此數(shù)據(jù),模型綁定會(huì)使用配置為處理特定內(nèi)容類型的輸入格式化程序。 默認(rèn)情況下,ASP.NET Core 包括用于處理 ON 數(shù)據(jù)的基于 ON 的輸入格式化程序。 可以為其他內(nèi)容類型添加其他格式化程序。

ASP.NET Core 基于 Consumes 屬性來選擇輸入格式化程序。 如果沒有屬性,它將使用 Content-Type 標(biāo)頭。

要使用內(nèi)置 XML 輸入格式化程序,請(qǐng)執(zhí)行以下操作:

由輸入格式化程序完全負(fù)責(zé)從請(qǐng)求正文讀取數(shù)據(jù)。 若要自定義此過程,請(qǐng)配置輸入格式化程序使用的 API。 此部分介紹如何自定義基于 System.Text.Json 的輸入格式化程序,以了解自定義類型 ObjectId。

以包含自定義 ObjectId 屬性 Id 的模型為例:

使用 System.Text.Json 時(shí),若要自定義模型綁定過程,請(qǐng)創(chuàng)建派生自 JsonConverter 的類:

將 JsonConverterAttribute 屬性應(yīng)用到此類型,以使用自定義轉(zhuǎn)換器。 在下面的示例中,為 ObjectId 類型配置了 ObjectIdConverter 來作為其自定義轉(zhuǎn)換器:

有關(guān)詳細(xì)信息,請(qǐng)參閱如何編寫自定義轉(zhuǎn)換器。

模型綁定和驗(yàn)證系統(tǒng)的行為由 ModelMetadata 驅(qū)動(dòng)。 可通過向 MvcOptions.ModelMetadataDetailsProviders 添加詳細(xì)信息提供程序來自定義 ModelMetadata。 內(nèi)置詳細(xì)信息提供程序可用于禁用指定類型的模型綁定或驗(yàn)證。

要禁用指定類型的所有模型的模型綁定,請(qǐng)?jiān)?Startup.ConfigureServices 中添加 ExcludeBindingMetadataProvider。 例如,禁用對(duì) System.Version 類型的所有模型的模型綁定:

要禁用指定類型的屬性的驗(yàn)證,請(qǐng)?jiān)?Startup.ConfigureServices 中添加 SuppressChildValidationMetadataProvider。 例如,禁用對(duì) System.Guid 類型的屬性的驗(yàn)證:

通過編寫自定義模型綁定器,并使用 屬性為給定目標(biāo)選擇該模型綁定器,可擴(kuò)展模型綁定。 詳細(xì)了解自定義模型綁定。

可以使用 TryUpdateModelAsync 方法手動(dòng)調(diào)用模型綁定。 ControllerBase 和 PageModel 類上均定義了此方法。 方法重載允許指定要使用的前綴和值提供程序。 如果模型綁定失敗,該方法返回 false。 下面是一個(gè)示例:

TryUpdateModelAsync 使用值提供程序從窗體正文、查詢字符串和路由數(shù)據(jù)獲取數(shù)據(jù)。 TryUpdateModelAsync 通常有以下特點(diǎn):

有關(guān)詳細(xì)信息,請(qǐng)參閱 TryUpdateModelAsync。

.net core 數(shù)據(jù)庫連接的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于.net core 數(shù)據(jù)庫連接,.NET Core 數(shù)據(jù)庫連接簡介,ASP.NET Core 中的模型綁定的信息別忘了在本站進(jìn)行查找喔。

成都創(chuàng)新互聯(lián)科技有限公司,經(jīng)過多年的不懈努力,公司現(xiàn)已經(jīng)成為一家專業(yè)從事IT產(chǎn)品開發(fā)和營銷公司。廣泛應(yīng)用于計(jì)算機(jī)網(wǎng)絡(luò)、設(shè)計(jì)、SEO優(yōu)化、關(guān)鍵詞排名等多種行業(yè)!


文章名稱:.NETCore數(shù)據(jù)庫連接簡介(.netcore數(shù)據(jù)庫連接)
分享路徑:http://www.5511xx.com/article/dhciiss.html