'Calling stored procedure on Inherited class in [Fluent] NHibernate without discriminators
I have a working Fluent project with some inherited tables
class Base { int BaseId }
class Derived : Base {}
class Derived2 : Base {}
class BaseMap : ClassMap<Base> { ID BaseId ); }
class DerivedMap : SubclassMap<Derived> { Id( BaseId ); }
class DerivedMap2 : SubclassMap<Derived2> {Id( BaseId ); }
These tables do not have a dedicated "discriminator" column, NHibernate just figures it out.
I've noticed that the SQL queries it runs, even if I specifically request a Base entity, it will join to all subclasses, add a CASE statement with a parameter named clazz, and use that to return a proxy with the extended objects available (so it knows if there is a 'derived2' in existence and will just give me that). This all works fine...
Problem
I have an existing stored procedure that returns records from Base. I'm trying to call this via CreateSqlQuery like so:
Session.CreateSQLQuery( "exec SP_GetAllFromBase" )
.AddEntity( nameof( Base ) )
.List<Base>();
But when I try to map it an entity type of Base, I get an IndexOutOfRange exception as NHibernate tries to find a clazz property in the returned result set (just like it adds onto all its own queries...). But the stored procedure is just returning rows from Base and not adding a special case statement to the end.
Is there is way I can tell CreateSqlQuery that it specifically needs to return a Base instance and not Derived?
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|
