已经有与此命令关联的打开的DataReader,必须首先关闭

我有此查询,并且出现此函数错误:

var accounts = from account in context.Accounts

from guranteer in account.Gurantors

select new AccountsReport

{

CreditRegistryId = account.CreditRegistryId,

AccountNumber = account.AccountNo,

DateOpened = account.DateOpened,

};

return accounts.AsEnumerable()

.Select((account, index) => new AccountsReport()

{

RecordNumber = FormattedRowNumber(account, index + 1),

CreditRegistryId = account.CreditRegistryId,

DateLastUpdated = DateLastUpdated(account.CreditRegistryId, account.AccountNumber),

AccountNumber = FormattedAccountNumber(account.AccountType, account.AccountNumber)

})

.OrderBy(c=>c.FormattedRecordNumber)

.ThenByDescending(c => c.StateChangeDate);

public DateTime DateLastUpdated(long creditorRegistryId, string accountNo)

{

return (from h in context.AccountHistory

where h.CreditorRegistryId == creditorRegistryId && h.AccountNo == accountNo

select h.LastUpdated).Max();

}

错误是:

已经有一个与此命令相关联的打开的DataReader,必须先关闭它。

堆栈跟踪已添加:

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

System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) +5008639

System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +23

System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +144

System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +87

System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32

System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141

System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) +12

System.Data.Common.DbCommand.ExecuteReader(CommandBehavior behavior) +10

System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +443

[EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details.]

System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) +479

System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context, ObjectParameterCollection parameterValues) +683

System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) +119

System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +38

System.Linq.Enumerable.Single(IEnumerable`1 source) +114

System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__3(IEnumerable`1 sequence) +4

System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +29

System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +91

System.Data.Entity.Internal.Linq.DbQueryProvider.Execute(Expression expression) +69

System.Linq.Queryable.Max(IQueryable`1 source) +216

CreditRegistry.Repositories.CreditRegistryRepository.DateLastUpdated(Int64 creditorRegistryId, String accountNo) in D:\Freelance Work\SuperExpert\CreditRegistry\CreditRegistry\Repositories\CreditRegistryRepository.cs:1497

CreditRegistry.Repositories.CreditRegistryRepository.<AccountDetails>b__88(AccountsReport account, Int32 index) in D:\Freelance Work\SuperExpert\CreditRegistry\CreditRegistry\Repositories\CreditRegistryRepository.cs:1250

System.Linq.<SelectIterator>d__7`2.MoveNext() +198

System.Linq.Buffer`1..ctor(IEnumerable`1 source) +217

System.Linq.<GetEnumerator>d__0.MoveNext() +96

回答:

如果在迭代另一个查询的结果时执行查询,则会发生这种情况。从您的示例尚不清楚发生这种情况的位置,因为该示例尚未完成。

导致这种情况的一件事是,在迭代某些查询的结果时触发了延迟加载。

通过允许在连接字符串中使用MARS可以轻松解决此问题。将MultipleActiveResultSets=true连接字符串添加到提供程序部分(在其中指定了数据源,初始目录等)。

以上是 已经有与此命令关联的打开的DataReader,必须首先关闭 的全部内容, 来源链接: utcz.com/qa/408319.html

回到顶部