我在我的 asp.net mvc Web 应用程序中有以下方法,并且我使用实体框架作为数据访问层:-
public IEnumerable<AaaUserContactInfo> getcontactinfo(long[] id)
{
var organizationsiteids = (from accountsitemapping in entities.AccountSiteMappings
where id.Any(accountid => accountsitemapping.ACCOUNTID == accountid)
select accountsitemapping.SITEID).ToList();
var usersdepts = from userdept in entities.UserDepartments
join deptdefinition in entities.DepartmentDefinitions on userdept.DEPTID equals deptdefinition.DEPTID
where organizationsiteids.Any(accountid => deptdefinition.SITEID == accountid)
var contactsinfos = from contactinfo in entities.AaaUserContactInfoes
join userdept in usersdepts on contactinfo.USER_ID equals userdept.USERID
select contactinfo;
return contactsinfos;
但是如果记录的数量很大,那么我会得到以下错误:-
您的 SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.SqlClient.SqlException:您的 SQL 语句的某些部分嵌套得太深。重写查询或将其分解为更小的查询。
源错误:
在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
堆栈跟踪:
[SqlException (0x80131904): 你的 SQL 语句的某些部分嵌套太深。重写查询或将其分解为更小的查询。]
System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔 breakConnection,Action 1 完成,Int32 超时,Task& 任务,布尔 asyncWrite)+577 System.Data.SqlClient.SqlCommand .RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String 方法) +107 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior 行为, String 方法) +288 System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior 行为) +1801 wrapCloseInAction) +388
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +688
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +4403
System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() +82
System.Data.SqlClient.SqlDataReader.get_MetaData() +135
System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +6665229
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite) +6667096
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior 行为)+689
虽然如果返回的记录数很少,那么代码可以正常工作,那么可能是什么问题?