首页 > 解决方案 > 将 linq 用于 Npgsql EntityFramework6 模型时引发 SocketException

问题描述

经过努力让我的 MVC5 vb.net 应用程序配置了 Npgsql 和 EntityFramework6.Npgsql 我可以使用 Visual Studio 2017 中的实体数据模型向导很好地连接到 postgres 数据库,与 PostgreSQL 数据库的数据提供程序创建一个新连接,进入我的数据库服务器详细信息并测试连接(成功)。我也可以按预期双击 EDMX 文件并添加表格等。这是我第一个与 postgreSQL 数据库(通常使用 MS SQL Server)对话的项目。一切似乎都很好,直到我遇到尝试查询数据库的 linq 语句的代码。我的 Linq 声明是:

    Dim l_ListOfPwrCycleCrashEvents As List(Of pwr_cycle_crash_events) = (From item In m_AnalyticsEntities.pwr_cycle_crash_events Where item.serialnumber = "0123445678" Select item).ToList

我在 try/catch 块中有声明,但 Visual Studio 仍然报告以下内容:

抛出异常:System.dll 中的“System.Net.Sockets.SocketException”附加信息:无法立即完成非阻塞套接字操作

我似乎无法弄清楚为什么这个陈述会失败。我可以对同样在应用程序中配置的不同 EntityFramework (MS SQL Server) 使用类似的语句。

包含 linq 语句的完整方法:

    Public ReadOnly Property iCountOfPwrCycleCrashEvents(
                ByVal a_sSerialNumber As String
            ) As Integer Implements IAnalytics.iCountOfPwrCycleCrashEvents
                Get
                    Try
                        Dim l_ListOfPwrCycleCrashEvents As List(Of pwr_cycle_crash_events) = (From item In m_AnalyticsEntities.pwr_cycle_crash_events
                                                                                              Where item.serialnumber = a_sSerialNumber
                                                                                              Select item).ToList
                        If (l_ListOfPwrCycleCrashEvents IsNot Nothing) Then Return l_ListOfPwrCycleCrashEvents.Count
                    Catch l_Exception2 As System.Net.Sockets.SocketException
                        Dim askjfhakjh As Integer = 7
                    Catch l_Exception As Exception
                        Dim kjhadkjh As Integer = 1
                    End Try
                    Return 0
                End Get
            End Property

我在以.NET Framework 4.5.1为目标的应用程序中使用Npgsql v4.1.1EntityFramework6.Npgsql v6.3.0

我似乎无法弄清楚为什么 linq 语句会引发此异常或如何解决该问题。你有什么建议?

标签: entity-frameworkentity-framework-6linq-to-entitiesdatabase-connectionnpgsql

解决方案


我弄清楚了这个问题。我使用的是 4.5.1 框架,因为我认为我的依赖项不允许我迁移到 4.5.2。我转到包管理器控制台并运行以下命令: Update-Package -ProjectName myProjectName -reinstall 通过这样做,我发现我有一个需要但无法加载的包,因为它需要 4.5.2 框架(或更高版本)。我将应用程序的框架更改为 4.5.2 并发出上述包管理器命令,它执行没有错误。我运行了应用程序,linq 语句不再引发异常。


推荐阅读