C# 林克';索引超出了数组';问题
在尝试使用C#Linq设置单元测试以将项目插入SQL Server Express(2008)数据库时,我遇到了一个错误,这给我带来了一些麻烦。Linq代码是使用VisualStudio2008构建的 在运行Windows XP SP2的系统上引发异常。Linq工作正常,记录正确插入到运行Windows 7 Home Premium(64位)的系统中 我已经在XP系统上删除并重新创建了数据库。我在XP系统上删除并重新创建了DAL和相应的DBML 对于插入到同一数据库的其他表,使用单元测试可以很好地工作 在SQLServerManagementStudio中使用简单的insert语句将记录插入到表中可以正常工作 我应该看什么来找到问题的根源?应该做些什么来解决这个问题 任何关于错误消息真正想说什么的见解都将不胜感激 错误消息C# 林克';索引超出了数组';问题,c#,linq-to-sql,C#,Linq To Sql,在尝试使用C#Linq设置单元测试以将项目插入SQL Server Express(2008)数据库时,我遇到了一个错误,这给我带来了一些麻烦。Linq代码是使用VisualStudio2008构建的 在运行Windows XP SP2的系统上引发异常。Linq工作正常,记录正确插入到运行Windows 7 Home Premium(64位)的系统中 我已经在XP系统上删除并重新创建了数据库。我在XP系统上删除并重新创建了DAL和相应的DBML 对于插入到同一数据库的其他表,使用单元测试可以很好
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;
}
}
堆栈跟踪
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;
}
}
插入代码
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;
}
}
我已经研究了以下问题,但没有深入了解是什么导致了这个问题
看看链接
以下是一些摘录:
此错误的常见原因是
指向错误的联想
方向。(指
如果编辑
手工制作模型,部分原因是
关联箭头指针位于
它将出现的另一端
(在ER图中)
及
我也有同样的问题
是因为我的主键是
两列而不是传统的
一个。(两个guid)。当我添加一个
第三纵队是唯一的主力
关键栏,它起作用了
更新:做了一些更多的戳周围,发现这样的帖子。看起来它可能与您的DBML有关…如果代码在一台机器上工作,而在另一台机器上不工作,那么问题应该在外部某处。请检查Windows XP上的.NET Framework版本是否与Windows 7上的相同。其次,如果是XP SP2,那么操作系统可能是原因,因为微软在SP3上做了很多改变。还要检查数据库是否有相同的表。尝试在同一数据库上重现问题,即从Win7进行备份并在XP上恢复(当然,首先备份数据)。还有什么?安全权限和连接字符串可能也会产生影响。您能指出代码中第50行的位置吗?@Abe Done。这是db.SubmitChanges()调用。@Abe我也查看了这两个链接。DBML看起来是正确的。事实上,它在一台计算机上工作。这个表只有一个字段主键。当你说“它在一台计算机上工作”时,你的意思是你在两个地方运行相同的代码,而只在一个地方得到错误?@Abe是的。相同的代码正在两台不同的计算机上运行。一个作品;另一个没有。我会得到一个diff程序,比较工作目录和非工作目录。在过去,我在csdiff方面运气很好:@Abe-最终,DBML中的一个关系是错误的。剩下的谜团是为什么它最初在某些系统上起作用。它在某些机器上工作的事实导致人们不愿意相信这种关系是错误的。