我们在这里遇到了困扰我们的情况。 我们已经在生产环境中使用相同的代码运行了几个月,一切都很顺利。 我们的架构规定了在同一个数据库上运行的多台机器。 我们正在使用.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.Shaper1.RowNestedResultEnumerator.MoveNext() at System.Data.Common.Internal.Materialization.Shaper
1.ObjectQueryNestedEnumerator.TryReadToNextElement() 在System.Data.Common.Internal.Materialization.Shaper1.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以了解实体框架的代码。看起来它正在尝试设置已经设置的内部缓存,因此它抛出了异常。 我们不太明白这个缓存的目的是什么。它用于存储主键吗?如果是这样,它是否以某种方式找到了重复的主键?这没有多大意义。 任何帮助将不胜感激。 感谢。