gpt4 book ai didi

entity-framework - 用于 postgresql 和 ado.net 实体数据模型的 MultipleActiveResultSets

转载 作者:行者123 更新时间:2023-11-29 11:37:47 24 4
gpt4 key购买 nike

我正在使用 visual studio、postgresql 数据库和 ado.net 实体数据模型。在连接字符串中,我无法设置 MultipleActiveResultSets=True

通常当我使用 MultipleActiveResultSets=True 连接到 sql server 时,它工作正常。但我不能对 postgresql 数据库进行相同的设置。

当我使用它时,出现了以下错误

There is already an open DataReader associated with this Command which must be closed first.

我该如何解决这个问题。

最佳答案

多事件结果集 (MARS) 是 SQL Server 2005 中引入的一项功能,在其他数据库系统(如 postgres)中不可用,因此您无法在连接字符串中启用它。

您遇到的错误是尝试在一个开放数据读取器上执行两个查询的结果。当使用 ie Entity Framework 时,这通常发生在您打开延迟加载并且延迟属性加载到与父实体相同的阅读器中时。例如,与此类似的代码可能会产生此错误:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha"));
foreach (var user in users)
{
Console.WriteLine(user.Address.StreetName);
}

在第一行中没有获取数据,因为我们只准备了一个 Linq 查询。当我们启动 foreach 时,会打开一个 DataReader 并查询满足我们条件的用户集合,但不会关闭阅读器。然后在 foreach 中,我们到达了延迟加载的 User 的 Address 属性。此延迟加载导致在同一个打开的 DataReader 上执行查询,这就是发生异常的时候。如果我想消除错误,我可以简单地在行尾添加一个 ToList()(或任何导致查询执行的内容),如下所示:

var users = context.Users.Where(u => u.FirstName.StartsWith("Ha")).ToList();

希望对您有所帮助。

关于entity-framework - 用于 postgresql 和 ado.net 实体数据模型的 MultipleActiveResultSets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8803733/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com