实体框架异常:索引超出了数组的范围。“

时间:2009-04-07 18:34:04

标签: vb.net entity-framework ado.net

2 个答案:

答案 0 :(得分:1)

他们在msdn论坛(http://social.msdn.microsoft.com/Forums/en-US/adodotnetentityframework/thread/fa618214-ad3d-42fc-8506-21d539aa2cb3

上遇到了同样的问题

检查那里的答案,可能是你的模型中不应该存在的一些额外的东西。你可以发布edmx文件吗?

答案 1 :(得分:1)

我刚刚遇到这种情况。

问题结果是与终端密钥的关联,它不是该实体主键的全部内容!

例如,在我的.edmx深处,我有这种关联:

<AssociationSetMapping Name="Table1Table2" TypeName="MyModel.Table1Table2" StoreEntitySet="Table2">
    <EndProperty Name="Table1">
        <ScalarProperty Name="Table1Key" ColumnName="Table1Key" /></EndProperty>
    <EndProperty Name="Table2">
        <ScalarProperty Name="Table2Key" ColumnName="Table2Key" />
        <ScalarProperty Name="Table2OtherColumn" ColumnName="Table2OtherColumn" />
</EndProperty></AssociationSetMapping>

,Table2的定义如下:

<EntityType Name="Table2">
    <Key>
        <PropertyRef Name="Table2Key" />
    </Key>
    <Property Name="Table2Key" Type="int" Nullable="false" />
    <Property Name="Table2OtherColumn" Type="int" Nullable="false" />
    ...other properties...
</EntityType>

请注意,Table2OtherColumn位于EndProperty中,但不属于实际密钥。从EndProperty中删除它解决了问题。

请注意,实体框架4 (Visual Studio 2010)可以在编译时检测到此问题。因此,如果您在跟踪导致此问题的表/属性时遇到严重问题,只需将项目加载到VS 2010 Express中(在备份之后!)并尝试编译。