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

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何實(shí)現(xiàn)abp框架中的數(shù)據(jù)庫連接?(abp數(shù)據(jù)庫連接)

如何實(shí)現(xiàn)ABP框架中的數(shù)據(jù)庫連接?

創(chuàng)新互聯(lián)專注于網(wǎng)站設(shè)計(jì)制作、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開發(fā)。公司秉持“客戶至上,用心服務(wù)”的宗旨,從客戶的利益和觀點(diǎn)出發(fā),讓客戶在網(wǎng)絡(luò)營銷中找到自己的駐足之地。尊重和關(guān)懷每一位客戶,用嚴(yán)謹(jǐn)?shù)膽B(tài)度對待客戶,用專業(yè)的服務(wù)創(chuàng)造價值,成為客戶值得信賴的朋友,為客戶解除后顧之憂。

ABP框架(ASP.NET Boilerplate)是一款基于ASP.NET Core和Entity Framework Core的開源Web應(yīng)用程序框架,它提供了一套通用的基礎(chǔ)設(shè)施,用于開發(fā)跨平臺和可擴(kuò)展的Web應(yīng)用程序。在ABP框架中,數(shù)據(jù)庫連接是必不可少的一部分,下面將介紹如何實(shí)現(xiàn)ABP框架中的數(shù)據(jù)庫連接。

之一步:配置數(shù)據(jù)庫連接字符串

在ABP框架中,數(shù)據(jù)庫連接字符串是存儲在appsettings.json配置文件中的,所以首先需要在這個文件中配置數(shù)據(jù)庫連接字符串??梢园凑找韵率纠a進(jìn)行配置:

“`

{

“ConnectionStrings”: {

“Default”: “Server=(localdb)\\mssqllocaldb;Database=MyDatabase;Trusted_Connection=True;MultipleActiveResultSets=true”

},

“App”: {

“SelfUrl”: “http://localhost:6228”,

“CorsOrigins”: “http://localhost:4200”

}

}

“`

在這個示例代碼中,ConnectionStrings節(jié)點(diǎn)下的Default屬性存儲了連接到本地?cái)?shù)據(jù)庫MyDatabase的連接字符串。根據(jù)實(shí)際情況,可以將服務(wù)器名稱、數(shù)據(jù)庫名稱等修改為合適的值。

第二步:添加數(shù)據(jù)庫提供程序

在ABP框架中,需要添加數(shù)據(jù)庫提供程序,以便支持連接不同類型的數(shù)據(jù)庫??梢允褂肗uGet安裝Entity Framework Core的數(shù)據(jù)庫提供程序,例如SqlServer、PostgreSQL、MySQL等。以下是使用SqlServer提供程序的示例代碼:

“`

public void ConfigureServices(IServiceCollection services)

{

services.AddDbContext(options =>

options.UseSqlServer(Configuration.GetConnectionString(“Default”)));

}

“`

在這個示例代碼中,調(diào)用了AddDbContext方法向DI容器中注冊了MyDbContext上下文,并使用UseSqlServer方法指定使用SqlServer提供程序連接MyDatabase數(shù)據(jù)庫。根據(jù)實(shí)際情況,可以將MyDbContext替換為自己定義的DbContext子類,以及調(diào)用不同的UseXXX方法指定不同的數(shù)據(jù)庫提供程序。

第三步:使用數(shù)據(jù)庫上下文

在ABP框架中,可以使用注入的數(shù)據(jù)庫上下文來訪問數(shù)據(jù)庫??梢栽谛枰褂脭?shù)據(jù)庫的地方,例如ApplicationService和Repository中,通過構(gòu)造函數(shù)注入數(shù)據(jù)庫上下文,例如:

“`

public class MyApplicationService : ApplicationService

{

private readonly MyDbContext _dbContext;

public MyApplicationService(MyDbContext dbContext)

{

_dbContext = dbContext;

}

public async Task GetMyEntityAsync(int id)

{

return awt _dbContext.MyEntities.FindAsync(id);

}

}

public class MyRepository : EfCoreRepositoryBase, IMyRepository

{

public MyRepository(IDbContextProvider dbContextProvider)

: base(dbContextProvider)

{

}

}

“`

在這個示例代碼中,MyApplicationService和MyRepository都依賴于MyDbContext,通過構(gòu)造函數(shù)注入了MyDbContext實(shí)例,并使用它來訪問數(shù)據(jù)庫。注意,在Repository中使用的是EfCoreRepositoryBase基類,它提供了一些內(nèi)置的常用的數(shù)據(jù)庫訪問方法,例如GetAsync、InsertAsync等。

小結(jié):

相關(guān)問題拓展閱讀:

  • C#如何用ajax把本地?cái)?shù)據(jù)庫的數(shù)據(jù)顯示在前端頁面(view里面)?例如一個span一個div
  • 100ms的SQL把服務(wù)器搞崩潰了
  • abp換能器的位置放在哪里

C#如何用ajax把本地?cái)?shù)據(jù)庫的數(shù)據(jù)顯示在前端頁面(view里面)?例如一個span一個div

首先寫一個一般處理程序來獲取到你要加載到前臺的數(shù)據(jù),并序列化成json格式。

//代碼實(shí)例

public class AjaxUserList : IHttpHandler {

public void ProcessRequest(HttpContext context) {

context.Response.ContentType = “text/plain”;

BLL.UserInfoBll userInfoBll = new BLL.UserInfoBll();

int pageIndex;

if (!int.TryParse(context.Request,out pageIndex)) {

  pageIndex = 1;

}

int pageSize = 5;

int pageCount = userInfoBll.GetPageCount(pageSize);

//判斷當(dāng)前頁碼的取值范圍

pageIndex = pageIndex  pageCount ? pageCount : pageIndex;

隱圓   //獲取分頁數(shù)據(jù)

List userList = userInfoBll.GetPageList(pageIndex, pageSize);

//獲取頁碼條

string pageBar = Util.PageBar.GetPageBar(pageIndex, pageCount);

//***********************************************************

//使用匿名類將多組數(shù)據(jù)序列化成Json格式

//***********************************************************

JavaScriptSerializer js = new JavaScriptSerializer();

string json = js.Serialize(new { resultUserList = userList, resultPageBar = pageBar });//此處使用了匿名類將userList和pageBar進(jìn)行封裝后,再序列化

//***********************************************************

context.Response.Write(json);

}

public bool IsReusable {

get {

  return false;

}

}

    }

然后,前臺ajax請求這個一般處理處理程序獲取到j(luò)son數(shù)據(jù),再通過js將數(shù)余褲據(jù)添加到html。

//加載用戶列表示例

function LoadUserInfo(pageIndex) {

$.post(“AjaxUserList.ashx”, { “pageIndex”: pageIndex }, function (data) {

  var serverData = $.parseON(data);

  for (var i = 0; i ” + serverData.resultUserList.ID + “” + serverData.resultUserList.UName + “” + serverData.resultUserList.UPwd + “” + ChangeDateFormat(serverData.resultUserList.SubTime) + “” + serverData.resultUserList.Remark + “豎攜簡詳細(xì)編輯  刪除”).appendTo(“#tabUserList”);

  }

});

100ms的SQL把服務(wù)器搞崩潰了

一個項(xiàng)目上線了兩個月,除了一些反饋的優(yōu)化和小Bug之外,項(xiàng)目一切順利;前期是屬于推廣階段,可能使用人員沒那么多,當(dāng)然對于項(xiàng)目部署肯定提前想到并發(fā)量了,所以早就把集群安排上,而且還在測試環(huán)境搞了一下壓測,絕對是沒得問題的;但是,就在兩個月后的一天,系統(tǒng)銀攔襲突然跑的比烏龜還慢,投訴開始就陸續(xù)反饋過來了。

經(jīng)過排查,原來是頻繁執(zhí)行一條耗時100ms的SQL導(dǎo)致,100ms感覺不長,但就是把系統(tǒng)搞崩了,具體細(xì)節(jié)如下。

項(xiàng)目采用ABP進(jìn)行開發(fā),集成統(tǒng)一的認(rèn)證中心(IDS4),部分?jǐn)?shù)據(jù)對接第三方系統(tǒng),拆分后的這個項(xiàng)目架構(gòu)相對簡單。

考慮并發(fā)量不高,就算是高峰期也不會超過1000,于是就搞了個單臺的數(shù)據(jù)庫服務(wù)器(MySQL),測試環(huán)境中經(jīng)過壓測,完全能抗住。

上線時,由于線上資源的關(guān)系,DB服務(wù)器的配置沒有按測試環(huán)境的標(biāo)準(zhǔn)來分配,相關(guān)人員想著后續(xù)看情況進(jìn)行補(bǔ)配。上線推的比較緊,簡單評估了配置風(fēng)險,初步判斷沒啥大問題,于是就推上線了。

相關(guān)技術(shù)棧:ABP、IdentityServer4、Autofac、AutoMapper、Quartz.NET、EF Core、Redis、MySQL等,這都不重要,重要的是100ms的SQL把系統(tǒng)搞崩了。

由于系統(tǒng)相對不大,并沒有把分布式日志、調(diào)度監(jiān)控,性能監(jiān)控集成上去。

上線期間,前期處于使用推廣階段,一切正常。兩個月后的一天,系統(tǒng)處于使用高峰時段,突然陸續(xù)收到反饋:系統(tǒng)有點(diǎn)卡?。。∮谑勤s緊進(jìn)行排查。

由于系統(tǒng)已經(jīng)是集群部署的,慢這個問題首先懷疑是數(shù)據(jù)庫服務(wù)器,于是讓DBA的同事排查了一下,沒有鎖,只是有大量事務(wù)等待提交(waiting for handler commit),通過如下命令可查的:

看到都是插入審計(jì)日志記錄導(dǎo)致,一看日志記錄頻率,差不多一秒500條記錄。DBA同事說可能是記錄插入頻繁導(dǎo)致,此時CPU已經(jīng)爆到100%了,為了快速解決問題,于是就趕緊關(guān)掉了一些不必要的日志記錄。

這么一改衡困,稍微降了一點(diǎn),沒有事務(wù)提交的記錄,系統(tǒng)勉強(qiáng)可以撐著用,但是CPU還是在85%~97%波動;

看到這種情況,當(dāng)然還是不放心,繼續(xù)排查。 中間有對服務(wù)器的配置產(chǎn)生過懷疑,但非常肯定的是這不是主要原因,于是和DBA的同事繼續(xù)排查。

系統(tǒng)雖然可以正常使用,但時不時的也看看監(jiān)控屏,CPU一直處于高水位狀態(tài),還是有點(diǎn)慌的,因?yàn)橐挥袉栴},信息和都要爆。

突然DBA同事發(fā)現(xiàn)有一個單表查詢的SQL執(zhí)行比較頻繁,于是單獨(dú)拿出來試了一下,查詢時間150ms左右,這個表的數(shù)據(jù)量不大,8萬左右,但沒有加任何索引,因?yàn)橄胫鴶?shù)據(jù)量不大,查詢時長還可接受,所以當(dāng)時就沒有加相關(guān)索引。

定位到這條SQL后,想到的之一步就是增加索引,在測試環(huán)境上試了一把,執(zhí)行效率直接飛速提高到1ms;效果如下:

所以和DBA同事達(dá)成一致意見,在生成環(huán)境上增加復(fù)合索引(

創(chuàng)建索引一定要注意字段順序

),在中午時候,系統(tǒng)使用頻率不太高,于是就在生成上快速加了索引,我去,CPU一下降到了20%以內(nèi),意不意外;就算在使用高鋒兄峰期,也沒超過20%,通過zabbix工具監(jiān)控看到CPU的效果:

問題算是解決了,總算松了一口氣。

這里有個問題: CPU都爆了為什么沒有報(bào)警提醒,這塊DBA同事正在排查相關(guān)配置。這里發(fā)現(xiàn)CPU爆了,還是無意的遠(yuǎn)程到服務(wù)器,發(fā)現(xiàn)很卡,一看CPU才知道爆了。

系統(tǒng)雖小,問題不大,但其實(shí)暴露的問題還是挺多。

這次線上小事故暫時分享到這,因?yàn)轫?xiàng)目不大,所以沒有做那么多監(jiān)控,但以下建議,小伙伴可以參考一下:

abp換能器的位置放在哪里

abp換能器的放置放在患者右心房水平。根據(jù)查詢相關(guān)資料信息,排空管道中的空氣,敗御閉同時連接換能器與監(jiān)護(hù)儀的壓力模塊,選中ABP模式,將換能器固定在患者右心房水拆答平察裂,并進(jìn)行校零。連接延長管和動脈插管。此時監(jiān)護(hù)儀上出現(xiàn)動脈波并顯示收縮壓、舒張壓和平均壓的數(shù)值。

關(guān)于abp 數(shù)據(jù)庫連接的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

成都創(chuàng)新互聯(lián)建站主營:成都網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站改版的網(wǎng)站建設(shè)公司,提供成都網(wǎng)站制作成都網(wǎng)站建設(shè)、成都網(wǎng)站推廣、成都網(wǎng)站優(yōu)化seo、響應(yīng)式移動網(wǎng)站開發(fā)制作等網(wǎng)站服務(wù)。


分享標(biāo)題:如何實(shí)現(xiàn)abp框架中的數(shù)據(jù)庫連接?(abp數(shù)據(jù)庫連接)
網(wǎng)頁URL:http://www.5511xx.com/article/dpehhpp.html