在尝试使用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)
答案 0 :(得分:2)
查看this链接。
以下是一些摘录:
此错误的常见原因是 指向错误的协会 方向。 (事情就是这样 编辑时非常容易 手工模型,部分原因是因为 关联箭头指针在 它会出现在哪里的另一端 在ER图中)
和
我遇到了同样的问题 是因为我的主键是 两列而不是传统的 一。 (两个指导)。当我添加一个 第三列是唯一的主要栏目 关键栏,它有效。
更新:进行了一些更多的探索并找到this SO帖子。看起来它可能与您的DBML有关...
答案 1 :(得分:1)
如果代码在一台机器上工作而不在另一台机器上工作,问题应该在外面的某个地方。请检查Windows XP上的.NET Framework版本是否与Windows 7上的相同。其次,如果它的XP SP2,那么操作系统可能是原因,因为Microsoft在SP3中已经发生了很大变化。还要检查数据库是否具有相同的表。尝试在同一个数据库上重现问题,即从Win7进行备份并在XP上恢复它(首先备份您的数据)。还有什么?安全权限和连接字符串也可能会产生影响。