Skip to content

Model not mapped Exception #2805

Closed
@micmerchant

Description

@micmerchant

Hello,

we are trying to update from a custom NHibernate 5.2.5 version to the a custom 5.3.8 build and are facing some mapping problems in context of joins with models with an interface.

Here are some simple unit tests, which i've added to your Test project of the current 5.3.8 branch, to reproduce the problem.

[Test("Working")]
public async Task IlogsTest1()
{
	var query = db.Users
				  .Select(u => u.Name);

	await query.ToListAsync();
}


[Test("Working")]
public async Task IlogsTest2()
{
	var query = db.IUsers
				  .Select(u => u.Name);

	await query.ToListAsync();
}


[Test("Not Working")]
public async Task IlogsTest3()
{
	var query = db.Users.Join(db.IUsers,
							  u => u.Id,
							  iu => iu.Id,
							  (u, iu) => iu.Name);

	await query.ToListAsync();
}


[Test("Working")]
public async Task IlogsTest4()
{
	var query = db.IUsers.Join(db.Users,
							   iu => iu.Id,
							   u => u.Id,
							   (iu, u) => u.Name);

	await query.ToListAsync();
}

The exception:

NHibernate.Test.Linq.LinqQuerySamplesAsync.IlogsTest3

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : NHibernate.DomainModel.Northwind.Entities.IUser is not mapped [.Join[NHibernate.DomainModel.Northwind....

NHibernate.Hql.Ast.ANTLR.QuerySyntaxException : NHibernate.DomainModel.Northwind.Entities.IUser is not mapped [.Join[NHibernate.DomainModel.Northwind.Entities.User, NHibernate.DomainModel, Version=5.4.0.0, Culture=neutral, PublicKeyToken=null,NHibernate.DomainModel.Northwind.Entities.IUser, NHibernate.DomainModel, Version=5.4.0.0, Culture=neutral, PublicKeyToken=null,System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089,System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089](NHibernate.Linq.NhQueryable`1[NHibernate.DomainModel.Northwind.Entities.User], NHibernate.Linq.NhQueryable`1[NHibernate.DomainModel.Northwind.Entities.IUser], Quote((u, ) => (u.Id)), Quote((iu, ) => (iu.Id)), Quote((u, iu, ) => (iu.Name)), )]
   at NHibernate.Hql.Ast.ANTLR.SessionFactoryHelperExtensions.RequireClassPersister(String name) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\SessionFactoryHelperExtensions.cs:line 273
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.ResolveEntityJoinReferencedPersister(IASTNode path) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\HqlSqlWalker.cs:line 803
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.CreateFromJoinElement(IASTNode path, IASTNode alias, Int32 joinType, IASTNode fetchNode, IASTNode propertyFetch, IASTNode with) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\HqlSqlWalker.cs:line 709
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.joinElement() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 5510
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElement() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 5084
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromElementList() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 4813
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.fromClause() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 4716
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.unionedQuery() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 1756
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.query() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 1583
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.selectStatement() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 432
   at NHibernate.Hql.Ast.ANTLR.HqlSqlWalker.statement() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\obj\Debug\net461\HqlSqlWalker.cs:line 310
   at NHibernate.Hql.Ast.ANTLR.HqlSqlTranslator.Translate() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line 613
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Analyze(String collectionRole) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line 459
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.DoCompile(IDictionary`2 replacements, Boolean shallow, String collectionRole) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line 399
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.Compile(IDictionary`2 replacements, Boolean shallow) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\QueryTranslatorImpl.cs:line 91
   at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IQueryExpression queryExpression, IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\ASTQueryTranslatorFactory.cs:line 43
   at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Hql\Ast\ANTLR\ASTQueryTranslatorFactory.cs:line 20
   at NHibernate.Engine.Query.QueryExpressionPlan.CreateTranslators(IQueryExpression queryExpression, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Engine\Query\QueryExpressionPlan.cs:line 38
   at NHibernate.Engine.Query.QueryExpressionPlan..ctor(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Engine\Query\QueryExpressionPlan.cs:line 20
   at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow, IDictionary`2 enabledFilters) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Engine\Query\QueryPlanCache.cs:line 69
   at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(IQueryExpression queryExpression, Boolean shallow) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Impl\AbstractSessionImpl.cs:line 584
   at NHibernate.Impl.AbstractSessionImpl.CreateQuery(IQueryExpression queryExpression) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Impl\AbstractSessionImpl.cs:line 552
   at NHibernate.Linq.DefaultQueryProvider.PrepareQuery(Expression expression, IQuery& query) in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Linq\DefaultQueryProvider.cs:line 208
   at NHibernate.Linq.DefaultQueryProvider.<ExecuteListAsync>d__0`1.MoveNext() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Async\Linq\DefaultQueryProvider.cs:line 40
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult()
   at NHibernate.Linq.LinqExtensionMethods.<>c__DisplayClass59_0`1.<<ToListAsync>g__InternalToListAsync|0>d.MoveNext() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate\Linq\LinqExtensionMethods.cs:line 2394
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at NHibernate.Test.Linq.LinqQuerySamplesAsync.<IlogsTest3>d__86.MoveNext() in C:\git\Repositories\Tools\NHibernate\Default\Core\src\NHibernate.Test\Async\Linq\LinqQuerySamples.cs:line 1430
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
   at NUnit.Framework.Internal.TaskAwaitAdapter.GenericAdapter`1.GetResult()
   at NUnit.Framework.Internal.AsyncToSyncAdapter.Await(Func`1 invoke)
   at NUnit.Framework.Internal.Commands.TestMethodCommand.RunTestMethod(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.TestMethodCommand.Execute(TestExecutionContext context)
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.<>c__DisplayClass1_0.<Execute>b__0()
   at NUnit.Framework.Internal.Commands.BeforeAndAfterTestCommand.RunTestMethodInThreadAbortSafeZone(TestExecutionContext context, Action action)

-----

One or more child tests had errors
  Exception doesn't have a stacktrace

It looks like, that domain models with an interface, which applies to all of our models, can't be resolved in case of joins. Maybe there is some code missing which tries to resolve the persister for the model implementation in SessionFactoryHelper::FindEntityPersisterUsingImports like you did for ExpressionsHelper::TryGetEntityPersister.

Thanks in advance,
br Michael

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions