From 23015199fdd955cbfe76f26d540106373dc53016 Mon Sep 17 00:00:00 2001 From: Nikos Sarris Date: Wed, 7 Jul 2021 21:21:23 +0300 Subject: [PATCH] Fixed issue with caching of enumerable instead of list. --- .../Semantics/CsdlSemanticsNavigationSource.cs | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/Microsoft.OData.Edm/Csdl/Semantics/CsdlSemanticsNavigationSource.cs b/src/Microsoft.OData.Edm/Csdl/Semantics/CsdlSemanticsNavigationSource.cs index eb9ce02599..75878b0e67 100644 --- a/src/Microsoft.OData.Edm/Csdl/Semantics/CsdlSemanticsNavigationSource.cs +++ b/src/Microsoft.OData.Edm/Csdl/Semantics/CsdlSemanticsNavigationSource.cs @@ -42,7 +42,7 @@ internal abstract class CsdlSemanticsNavigationSource : CsdlSemanticsElement, IE private readonly ConcurrentDictionary unknownNavigationPropertyCache = new ConcurrentDictionary(); - private ConcurrentDictionary> navigationPropertyBindingCache = + private readonly ConcurrentDictionary> navigationPropertyBindingCache = new ConcurrentDictionary>(); public CsdlSemanticsNavigationSource(CsdlSemanticsEntityContainer container, CsdlAbstractNavigationSource navigationSource) @@ -130,15 +130,10 @@ public IEnumerable FindNavigationPropertyBindings { if (!navigationProperty.ContainsTarget) { - IEnumerable navigationBindingList = null; - - if (!navigationPropertyBindingCache.TryGetValue(navigationProperty, out navigationBindingList)) - { - navigationBindingList = this.NavigationPropertyBindings.Where(targetMapping => targetMapping.NavigationProperty == navigationProperty); - navigationPropertyBindingCache[navigationProperty] = navigationBindingList; - } - - return navigationBindingList; + return EdmUtil.DictionaryGetOrUpdate( + this.navigationPropertyBindingCache, + navigationProperty, + property => this.NavigationPropertyBindings.Where(targetMapping => targetMapping.NavigationProperty == property).ToList()); } return null;