首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ: IndexOutOfRangeException

LINQ: IndexOutOfRangeException
EN

Stack Overflow用户
提问于 2011-05-12 20:02:13
回答 2查看 1K关注 0票数 0

我有一个像这样的LINQ实体:

代码语言:javascript
复制
ID1 INT
ID2 INT
ID3 INT
Value VARCHAR(50)

ID1、ID2和ID3是复合主键。它与任何其他实体没有联系。

每当我在SubmitChanges.之后更新或删除时,都会引发SubmitChanges.我正在运行.NET 3.5 SP1。

我已经尝试过创建另一个项目,仍然在.NET 3.5 SP1上,但是不要遇到这个异常。

以下是代码:

代码语言:javascript
复制
        DataClasses context = new DataClasses();
        Entity entity = (from entities in context.Entities
                              where entities.ID1 == 3
                                && entities.ID2 == 1
                                && entities.ID3 == 1
                              select entities).First();

        context.Entities.DeleteOnSubmit(entity);
        context.SubmitChanges();

这是一个例外:

代码语言:javascript
复制
System.IndexOutOfRangeException was unhandled by user code
  Message="Index was outside the bounds of the array."
  Source="System.Data.Linq"
  StackTrace:
       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 Project.Page.Page_Load(Object sender, EventArgs e) in C:\ProjectFolder\Project\Page.aspx.cs:line 31
       at System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
       at System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
       at System.Web.UI.Control.OnLoad(EventArgs e)
       at System.Web.UI.Control.LoadRecursive()
       at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
  InnerException: 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-13 16:00:28

我从头开始重新创建了DBML。叹息..。

票数 1
EN

Stack Overflow用户

发布于 2011-05-12 20:14:57

看来LINQ (有/有)复合键有问题。实际的来源是MultiKeyManagerTryCreateKeyFromValues(Object[] values

ElegantCode在SubmitChanges post上的文章与您的错误完全相同,具有类似的条件。不同的是,他有另一个字段来修改.dbml模型,并将其标记为PK。

您能够在.dbml模型中修改/删除3个ints的PrimaryKey=true属性吗?

该条的关键引语是:

将PrimaryKey=true属性从SomeType和SomeValue中移除,并将其添加到ViewID属性上,现在LinqToSql将正确处理关联。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5983766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档