我有一张桌子,我们打电话Users.此表具有在SQL Server中定义的单个主键 - 自动增量int ID.
有时,我对该表的LINQ查询失败并出现"Index was outside the range"错误 - 即使是最简单的查询.查询本身不使用任何索引器.
例如:
User = Users.Take(1);
Run Code Online (Sandbox Code Playgroud)
要么
IEnumerable<Users> = Users.ToList();
Run Code Online (Sandbox Code Playgroud)
两个查询都抛出了同样的错误.使用调试器Visualizer查看生成的查询 - 我在SQL中复制并粘贴查询,它工作正常.我也点击了可视化工具上的"执行",它工作正常.但是,执行代码本身会引发此错误.我没有在类上实现任何部分方法,因此没有任何事情发生.如果我重新启动我的调试器,问题就会消失,只是在几个小时之后再次随机地重新启动它.更重要的是,我在生产中运行的应用程序的错误日志中看到了这个错误.
我在我的应用程序中对我的数据库中的十几个不同实体进行了大量的LINQ,但我只在与表中的特定实体相关的查询中看到此问题.一些谷歌搜索表明这个问题可能与我的模型和另一个实体之间指定的错误关系有关,但我与此对象没有任何关系.它似乎在95%的时间工作,只是其他5%的失败.
我已经从设计器中完全删除了该对象,并从"刷新"的服务器浏览器中重新添加了该对象,但这并没有解决问题.
有什么想法在这里发生了什么?
这是完整的错误消息和堆栈跟踪:
指数超出范围.必须是非负数且小于集合的大小.参数名称:System.Data.Linq的System.Data.Linq.SqlClient.SqlProvider.Execute(表达式查询,QueryInfo queryInfo,IObjectReaderFactory工厂,Object [] parentArgs,Object [] userArgs,ICompiledSubQuery [] subQueries,Object lastResult)的索引System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute中的.SqlClient.SqlProvider.ExecuteAll(Expression query,QueryInfo [] queryInfos,IObjectReaderFactory factory,Object [] userArguments,ICompiledSubQuery [] subQueries) (表达式查询)
1.System.Linq.IQueryProvider.Execute[TResult](Expression expression) at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable在MyProject.FindUserByType(String typeId)的System.Data.Linq.Table 1 source,Expression`1谓词)
编辑:根据要求,下面是表模式的副本.
CREATE TABLE [dbo].[Container](
[ID] [int] IDENTITY(1,1) NOT NULL,
[MarketCode] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,
[Description] [varchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用LINQ将记录插入到子表中,并且我收到"指定的强制转换无效"错误,该错误与所涉及的密钥有关.堆栈跟踪是:
消息:指定的强制转换无效.
类型:System.InvalidCastException源:System.Data.Linq TargetSite:Boolean TryCreateKeyFromValues(System.Object [],V ByRef)HelpLink:null Stack:at System.Data.Linq.IdentityManager.StandardIdentityManager.SingleKeyManager
2.TryCreateKeyFromValues(Object[] values, V& v) at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache2.Find(Object [] keyValues)在System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type,Object [] keyValues)处于System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type,Object [] keyValues)at at系统.Data.Linq.ChangeProcessor.BuildEdgeMaps()的System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc,Object实例)位于System.Data.Linq.DataContext的System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) System.Data.Linq.DataContext.SubmitChanges()中的.SubmitChanges(ConflictMode failureMode)(.....)
以下代码抛出此错误:
ResponseDataContext db = new ResponseDataContext(m_ConnectionString);
CodebookVersion codebookVersion = db.CodebookVersions.Single(cv => cv.VersionTag == m_CodebookVersionTag);
ResponseCode rc = new ResponseCode()
{
SurveyQuestionName = "Q11",
Code = 3,
Description = "Yet another code"
};
codebookVersion.ResponseCodes.Add(rc);
db.SubmitChanges(); //exception gets thrown here
Run Code Online (Sandbox Code Playgroud)
有问题的表格在两者之间具有FK关系.
父表的列名为'id',是PK,类型为:INT NOT NULL IDENTITY
子表的列名为'responseCodeTableId',类型为:INT NOT NULL.
codebookVersion(父类)映射到表tblResponseCodeTable
responseCode(childClass)映射到表tblResponseCode
如果我直接执行SQL,它可以工作.例如
INSERT …Run Code Online (Sandbox Code Playgroud)