question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Multithreading problem: Association key 'A_Id' not found for type 'B

See original GitHub issue

I have many of threads. Each thread creates DataConnection object. Sometimes (very rarely) i get following exception:

Association key ‘A_Id’ not found for type 'B

linq2db.dll!LinqToDB.Linq.Builder.TableBuilder.AssociatedTableContext.AssociatedTableContext(LinqToDB.Linq.Builder.ExpressionBuilder builder, LinqToDB.Linq.Builder.TableBuilder.TableContext parent, LinqToDB.Mapping.AssociationDescriptor association) Line 1312	C#
	linq2db.dll!LinqToDB.Linq.Builder.TableBuilder.TableContext.GetAssociation.AnonymousMethod__b6(LinqToDB.Mapping.AssociationDescriptor a) Line 1230	C#
	System.Core.dll!System.Linq.Enumerable.WhereSelectEnumerableIterator<LinqToDB.Mapping.AssociationDescriptor,LinqToDB.Linq.Builder.TableBuilder.AssociatedTableContext>.MoveNext()	Unknown
	System.Core.dll!System.Linq.Enumerable.FirstOrDefault<LinqToDB.Linq.Builder.TableBuilder.AssociatedTableContext>(System.Collections.Generic.IEnumerable<LinqToDB.Linq.Builder.TableBuilder.AssociatedTableContext> source)	Unknown
	linq2db.dll!LinqToDB.Linq.Builder.TableBuilder.TableContext.GetAssociation(System.Linq.Expressions.Expression expression, int level) Line 1232	C#
	linq2db.dll!LinqToDB.Linq.Builder.TableBuilder.TableContext.FindTable(System.Linq.Expressions.Expression expression, int level, bool throwException) Line 1197	C#
	linq2db.dll!LinqToDB.Linq.Builder.TableBuilder.TableContext.IsExpression(System.Linq.Expressions.Expression expression, int level, LinqToDB.Linq.Builder.RequestFor requestFor) Line 757	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.IsExpressionInternal.AnonymousMethod__48(LinqToDB.Linq.Builder.IBuildContext ctx, System.Linq.Expressions.Expression ex, int l) Line 650	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.ProcessScalar<LinqToDB.Linq.Builder.IsExpressionResult>(System.Linq.Expressions.Expression expression, int level, System.Func<LinqToDB.Linq.Builder.IBuildContext,System.Linq.Expressions.Expression,int,LinqToDB.Linq.Builder.IsExpressionResult> action, System.Func<LinqToDB.Linq.Builder.IsExpressionResult> defaultAction) Line 885	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.IsExpressionInternal(System.Linq.Expressions.Expression expression, int level, LinqToDB.Linq.Builder.RequestFor requestFlag) Line 647	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.IsExpression(System.Linq.Expressions.Expression expression, int level, LinqToDB.Linq.Builder.RequestFor requestFlag) Line 610	C#
	linq2db.dll!LinqToDB.Linq.Builder.ExpressionBuilder.ConvertExpressions(LinqToDB.Linq.Builder.IBuildContext context, System.Linq.Expressions.Expression expression, LinqToDB.Linq.Builder.ConvertFlags queryConvertFlag) Line 615	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.ConvertToSql(System.Linq.Expressions.Expression expression, int level, LinqToDB.Linq.Builder.ConvertFlags flags) Line 259	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.ConvertToIndexInternal(System.Linq.Expressions.Expression expression, int level, LinqToDB.Linq.Builder.ConvertFlags flags) Line 462	C#
	linq2db.dll!LinqToDB.Linq.Builder.SelectContext.ConvertToIndex(System.Linq.Expressions.Expression expression, int level, LinqToDB.Linq.Builder.ConvertFlags flags) Line 413	C#
	linq2db.dll!LinqToDB.Linq.Builder.DistinctBuilder.BuildMethodCall(LinqToDB.Linq.Builder.ExpressionBuilder builder, System.Linq.Expressions.MethodCallExpression methodCall, LinqToDB.Linq.Builder.BuildInfo buildInfo) Line 24	C#
	linq2db.dll!LinqToDB.Linq.Builder.MethodCallBuilder.BuildSequence(LinqToDB.Linq.Builder.ExpressionBuilder builder, LinqToDB.Linq.Builder.BuildInfo buildInfo) Line 22	C#
	linq2db.dll!LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(LinqToDB.Linq.Builder.BuildInfo buildInfo) Line 177	C#
	linq2db.dll!LinqToDB.Linq.Builder.ConcatUnionBuilder.BuildMethodCall(LinqToDB.Linq.Builder.ExpressionBuilder builder, System.Linq.Expressions.MethodCallExpression methodCall, LinqToDB.Linq.Builder.BuildInfo buildInfo) Line 25	C#
	linq2db.dll!LinqToDB.Linq.Builder.MethodCallBuilder.BuildSequence(LinqToDB.Linq.Builder.ExpressionBuilder builder, LinqToDB.Linq.Builder.BuildInfo buildInfo) Line 22	C#
	linq2db.dll!LinqToDB.Linq.Builder.ExpressionBuilder.BuildSequence(LinqToDB.Linq.Builder.BuildInfo buildInfo) Line 177	C#
	linq2db.dll!LinqToDB.Linq.Builder.ExpressionBuilder.Build<Telda.AP.Model.Entities.Citizen>() Line 148	C#
	linq2db.dll!LinqToDB.Linq.Query<Telda.AP.Model.Entities.Citizen>.GetQuery(LinqToDB.Linq.IDataContextInfo dataContextInfo, System.Linq.Expressions.Expression expr) Line 152	C#
	linq2db.dll!LinqToDB.Linq.ExpressionQuery<Telda.AP.Model.Entities.Citizen>.GetQuery(System.Linq.Expressions.Expression expression, bool cache) Line 84	C#
	linq2db.dll!LinqToDB.Linq.ExpressionQuery<Telda.AP.Model.Entities.Citizen>.Execute(LinqToDB.Linq.IDataContextInfo dataContextInfo, System.Linq.Expressions.Expression expression) Line 76	C#
	linq2db.dll!LinqToDB.Linq.ExpressionQuery<Telda.AP.Model.Entities.Citizen>.System.Collections.Generic.IEnumerable<T>.GetEnumerator() Line 156	C#
	System.Core.dll!System.Linq.Buffer<Telda.AP.Model.Entities.Citizen>.Buffer(System.Collections.Generic.IEnumerable<Telda.AP.Model.Entities.Citizen> source)	Unknown
	System.Core.dll!System.Linq.Enumerable.ToArray<Telda.AP.Model.Entities.Citizen>(System.Collections.Generic.IEnumerable<Telda.AP.Model.Entities.Citizen> source)	Unknown
>	CallingMethod	C#

B really does not have association with key A_Id. But A_Id (and A property with asociation attribute) has class C, which is descendant of class B (C : B). In the CallingMethod (from stack trace):

dataConnection.GetTable<C>().Select(c => c.A).Distinct()

Association attributes are writen properly, as CallingMethod works fine usually.

Issue Analytics

  • State:closed
  • Created 7 years ago
  • Comments:7 (7 by maintainers)

github_iconTop GitHub Comments

1reaction
ilicommented, Dec 23, 2016

Super! Thanks a lot, it looks like i know where is the problem!

0reactions
ilicommented, Feb 4, 2017

Should be fixed now

Read more comments on GitHub >

github_iconTop Results From Across the Web

Multi-threading issue with find/merge JPA - java
The method being invoked calls the em.find(Class<T> entityClass, Object primaryKey) with the ID of my Entity(Binary), if the object exists ...
Read more >
Top 10 Most Common Spring Framework Mistakes
Common Mistake #5: Improperly Dealing with Multithreading. Regardless of whether it is encountered in desktop or web apps, Spring or no Spring, multithreading...
Read more >
Scaling read aligners to hundreds of threads on general ...
In short, thread scaling suffers when added threads must access distant memories or when they compete for the same memory locations as existing...
Read more >
Spring Data MongoDB - Reference Documentation
An id property or field declared as BigInteger in the Java class is converted to and stored as an ObjectId by using a...
Read more >
TelephonyManager
Build apps that give your users seamless experiences from phones to tablets, watches, and more. ... Learn to build for your use case...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found