我的应用程序在 .NET Framework 4.7 上运行,我使用的是 Entity Framework 6.1.3。目前,我的代码使用命名空间中的一些类,System.Data.SqlClient例如SqlParameter. 我想切换到Microsoft.Data.SqlClient.
但是,我不确定 EF6 是否与Microsoft.Data.SqlClient. 这是微软的一篇旧文章,它说 EF Core、EF 6 等已经\xe2\x80\x99t 尚未过渡到新的提供程序Microsoft.Data.SqlClient。所以,我有点困惑。
System.Data.SqlClient下面的代码一切都运行良好
public async Task<ICollection<int>> GetChildCustomerIdsAsync(int customerId)\n{\n var sqlParameters = new List<SqlParameter>()\n {\n new SqlParameter("@CustomerId", customerId)\n };\n\n return await DbContext.Database.SqlQuery<int>("dbo.sp_GetChildCustomerIds @CustomerId=@CustomerId",\n sqlParameters.ToArray()).ToListAsync().ConfigureAwait(false);\n}\nRun Code Online (Sandbox Code Playgroud)\n但是,当我切换到 时Microsoft.Data.SqlClient,我收到此错误:
\nSystem.InvalidCastException:SqlParameterCollection 只接受非空 SqlParameter 类型对象,而不接受 SqlParameter 对象。
\nat System.Data.SqlClient.SqlParameterCollection.ValidateType(对象值)
\nat System.Data.SqlClient.SqlParameterCollection.AddRange(数组值)
\nat System.Data.Entity.Core.Objects.ObjectContext.CreateStoreCommand(String commandText, Object [] 参数)
\nat System.Data.Entity.Core.Objects.ObjectContext.ExecuteStoreQueryInternalAsync.d__6f`1.MoveNext() …
.net c# entity-framework entity-framework-6 microsoft-data-sqlclient
在我的代码中使用Microsoft.Data.SqlClient包(版本 2.0)时,当通过 CI 提供程序中的VSTest.console.exe执行单元测试(以及在本地运行时)时,我会收到以下错误:
System.TypeInitializationException:“Microsoft.Data.SqlClient.TdsParser”的类型初始值设定项引发异常。---> System.TypeInitializationException:“Microsoft.Data.SqlClient.SNILoadHandle”的类型初始值设定项引发异常。---> System.DllNotFoundException: 无法加载 DLL 'Microsoft.Data.SqlClient.SNI.x86.dll': 找不到指定的模块
代码执行正确,单元测试也可以在 NCrunch 和 Visual Studio 2019 测试运行器中正常工作 - 那么问题是什么?
c# unit-testing mstest vstest.console.exe microsoft-data-sqlclient
实际的
部署时发布管道失败
预期的
部署不会失败
根本原因
文件“Microsoft.Data.SqlClient.SNI.x86.dll”被外部进程锁定,即使“使应用程序脱机标志”设置处于打开状态
解决方法
手动回收应用程序池并重新运行失败的部署。
当使用“recycleAppPool”应用“Action IIS Application Pool”设置时,尝试自动回收也失败。
信息
错误信息
Error Code: ERROR_FILE_IN_USE More Information: Web Deploy cannot modify the file 'Microsoft.Data.SqlClient.SNI.x86.dll' on the destination because it is locked by an external process.
In order to allow the publish operation to succeed, you may need to either restart your application to release the lock, or use the AppOffline rule handler for .Net applications on your next publish attempt.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_FILE_IN_USE. Error: The process cannot …Run Code Online (Sandbox Code Playgroud) yaml continuous-deployment azure-devops azure-pipelines-release-pipeline microsoft-data-sqlclient
c# ×2
.net ×1
azure-devops ×1
azure-pipelines-release-pipeline ×1
mstest ×1
unit-testing ×1
yaml ×1