实体框架InvalidOperationException:已在此EntityReference上设置Value属性。

时间:2013-12-24 15:01:22

标签: c# entity-framework

我们在这里遇到了困扰我们的情况。 我们已经在生产环境中使用相同的代码运行了几个月,一切都很顺利。 我们的架构规定了在同一个数据库上运行的多台机器。 我们正在使用.net 3.5的实体框架。

突然之间,我们所有的机器(差不多)都出现了异常。 重新启动应用程序后,它不再发生。 这是例外:

  
    

异常:已在此EntityReference上设置Value属性。不能将多个相关对象添加到EntityReference。 (系统。     InvalidOperationException异常)     来源:System.Data.Entity     目标站点:Void AddEntityToLocallyCachedCollection(System.Data.Objects.DataClasses.IEntityWithRelationships,Boolean)     堆栈跟踪:在System.Data.Objects.DataClasses.EntityReference 1.AddEntityToLocallyCachedCollection(IEntityWithRelationships entity, Boolean applyConstraints) at System.Data.Objects.DataClasses.RelatedEnd.Add(IEntityWithRelationships targetEntity, Boolean applyConstraints, Boolean addRelationshipAsUnchanged, Boolean relationshipAlreadyExists) at System.Data.Objects.ObjectStateManager.AddEntityToCollectionOrReference(MergeOption mergeOption, IEntityWithRelationships sourceEntity, AssociationEndMember sourceMember, IEntityWithRelationships targetEntity, AssociationEndMember targetMember, Boolean setIsLoaded, Boolean relationshipAlreadyExists, Boolean inKeyEntryPromotion) at System.Data.Common.Internal.Materialization.Shaper.HandleRelationshipSpan[T_SourceEntity](T_SourceEntity entity, EntityKey targetKey, AssociationEndMember targetMember) at lambda_method(ExecutionScope , Shaper ) at System.Data.Common.Internal.Materialization.Coordinator 1.ReadNextElement(整形器整形器)        at System.Data.Common.Internal.Materialization.Shaper 1.RowNestedResultEnumerator.MoveNext() at System.Data.Common.Internal.Materialization.Shaper 1.ObjectQueryNestedEnumerator.TryReadToNextElement()        在System.Data.Common.Internal.Materialization.Shaper 1.ObjectQueryNestedEnumerator.ReadElement() at System.Data.Common.Internal.Materialization.Shaper 1.ObjectQueryNestedEnumerator.MoveNext()        在MyApplication.GetUsers()

  

当我们查询用户时(我们每隔几分钟刷新一次内部缓存)就会发生这种情况。 这是我们用来查询用户的代码:

    foreach (var user in context.User.Include("Table1").Include("Table2").Include("Table3").Include("Table4").Include("Table5")) 
        {
            users.Add(getUser(user ));
        }

由于这段代码非常陈旧,并且由于这一切都在所有计算机上同时发生,我们认为这与数据库有关(它们都是针对同一个数据库运行的)。 但是,我们没有在数据库跟踪中发现任何可疑的内容。 我们用Google搜索了错误,除了这个链接外没有找到任何东西 Entity Framework throwing InvalidOperationException when trying to load child tables没有向我们提供更多信息。这个模型不太可能出错,对吗?它已经运行了很长时间 没问题...... 我们还尝试查看Reflector以了解实体框架的代码。看起来它正在尝试设置已经设置的内部缓存,因此它抛出了异常。 我们不太明白这个缓存的目的是什么。它用于存储主键吗?如果是这样,它是否以某种方式找到了重复的主键?这没有多大意义。 任何帮助将不胜感激。 感谢。

0 个答案:

没有答案