EF Core連接sql server報“Internal connection fatal error.”


===============================================

 2020/9/21_第1次修改                       ccb_warlock

 

===============================================

之前asp.net core項目都是跑在IIS上的,最近有空在測試docker時發現在IDE調試和IIS里正常跑的項目,在部署到docker后報了“Internal connection fatal error.”。

加日志排查后,定位問題點在EF Core獲取數據時報了這個錯。

 

配置
基礎鏡像 mcr.microsoft.com/dotnet/core/aspnet:2.2-alpine
ORM Entity Framework Core 2.2
目標數據庫 MSSql

 

這里取一段報錯的代碼來描述問題點,報錯就出現在框架封裝的Get方法上(因為這個API最早操作數據庫的就是獲取數據)

private static DbSet<T> Set {get; set;}

public T Get(string id)
{
    return Set.AsNoTracking().FirstOrDefault(s => s.Id == id);
}

 

在沒有頭緒之后,我在 https://github.com/dotnet/SqlClient/issues/81#issuecomment-399375323 里找到了答案,目前看這個是很久之前就存在的問題,但是微軟官方的鏡像里倒是沒有去解決這個問題。

 

解決方案:

在使用官方asp.net core的alpine鏡像時,加個包(icu-libs)並設置1個環境變量就可以解決。(icu-libs不用梯子安裝要點時間)

RUN apk add --no-cache icu-libs
ENV DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false

PS.后面我也進行了其他測試,使用微軟官方非alpine鏡像(mcr.microsoft.com/dotnet/core/aspnet:2.2)倒是沒有這個問題,而非alpine鏡像只大了100MB。

 

結論:

所以目前階段為了少點事,還是先用官方非alpine鏡像來構建asp.net core項目吧。

 


參考資料:

1.https://github.com/dotnet/SqlClient/issues/81#issuecomment-399375323


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM