Linq'索引超出了阵列问题的范围

时间:2010-05-19 14:10:42

标签: c# linq-to-sql

在尝试使用C#Linq设置将项目插入SQL Server Express(2008)数据库的单元测试时,我遇到了一个错误,导致我遇到麻烦。 Linq代码是使用Visual Studio 2008构建的。

在运行Windows XP SP2的系统上抛出异常。 Linq工作正常,并在运行Windows 7 Home Premium(64位)的系统上正确插入记录。

我已经删除并在XP系统上重新创建了数据库。我已经删除并在XP系统上重新创建了DAL和相应的DBML。

对于插入到同一数据库的单元测试的其他表工作正常。

使用SQL Server Management Studio中的简单插入语句将记录插入表中可以正常工作。

我应该怎么看才能找到问题的根源?应该怎么做来解决这个问题?

非常感谢任何有关错误信息真正试图说明的信息。

错误消息

System.IndexOutOfRangeException : Index was outside the bounds of the array.

堆栈跟踪

at 

System.Data.Linq.IdentityManager.StandardIdentityManager.MultiKeyManager`3.TryCreateKeyFromValues(Object[] values, MultiKey`2& k)
at System.Data.Linq.IdentityManager.StandardIdentityManager.IdentityCache`2.Find(Object[] keyValues)
at System.Data.Linq.IdentityManager.StandardIdentityManager.Find(MetaType type, Object[] keyValues)
at System.Data.Linq.CommonDataServices.GetCachedObject(MetaType type, Object[] keyValues)
at System.Data.Linq.ChangeProcessor.GetOtherItem(MetaAssociation assoc, Object instance)
at System.Data.Linq.ChangeProcessor.BuildEdgeMaps()
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges()
at nUnit.DAL.FacilityTests.AddFacility2() in C:\SVN\SVNRevenue360\Branches\Dev\Code\ProviderAdvantage\nUnit.CoreTests\Tests\DAL\FacilityTests.cs:line 50

插入代码

        [Test]
    public void AddFacility2() {
        string facilityname = "Test Facility";
        try {
            using (PA.Database.Revenue360DB db = new PA.Database.Revenue360DB(PA.DAL.DataAccess.ConnectionString)) {
                db.Log = Console.Out;
                PA.Database.Facility facility = new PA.Database.Facility();
                facility.id = Guid.NewGuid();
                facility.Name = facilityname;
                facility.Street1 = "";
                facility.Street2 = "";
                facility.Street3 = "";
                facility.City = "";
                facility.State = "";
                facility.Zip = "";
                facility.Description = "";

                db.Facilities.InsertOnSubmit(facility);
                db.SubmitChanges();  // line 50
            }
        } catch (Exception ex) {
            Console.WriteLine(ex.GetType().FullName + ":  " + ex.Message);
            Console.WriteLine(ex.InnerException == null ? 
                "No inner exception" :
                ex.InnerException.GetType().FullName + ":  " + ex.InnerException.Message);
            throw;
        }
    }

我在没有深入了解导致此特定问题的原因的情况下查看了以下SO问题。

https://stackoverflow.com/questions/1087172/why-am-i-getting-index-was-outside-the-bounds-of-the-array IndexOutOfRangeException on Queryable.Single Strange LINQ Exception (Index out of bounds)

2 个答案:

答案 0 :(得分:2)

查看this链接。

以下是一些摘录:

  

此错误的常见原因是   指向错误的协会   方向。 (事情就是这样   编辑时非常容易   手工模型,部分原因是因为   关联箭头指针在   它会出现在哪里的另一端   在ER图中)

  

我遇到了同样的问题   是因为我的主键是   两列而不是传统的   一。 (两个指导)。当我添加一个   第三列是唯一的主要栏目   关键栏,它有效。

更新:进行了一些更多的探索并找到this SO帖子。看起来它可能与您的DBML有关...

答案 1 :(得分:1)

如果代码在一台机器上工作而不在另一台机器上工作,问题应该在外面的某个地方。请检查Windows XP上的.NET Framework版本是否与Windows 7上的相同。其次,如果它的XP SP2,那么操作系统可能是原因,因为Microsoft在SP3中已经发生了很大变化。还要检查数据库是否具有相同的表。尝试在同一个数据库上重现问题,即从Win7进行备份并在XP上恢复它(首先备份您的数据)。还有什么?安全权限和连接字符串也可能会产生影响。