private IQueryable ResolveEntityJoinReferencedPersister(FromReferenceNode path) { string entityName = path.Path; var persister = SessionFactoryHelper.FindQueryableUsingImports(entityName); if (persister == null && entityName != null) { var implementors = SessionFactoryHelper.Factory.GetImplementors(entityName); //Possible case - join on interface if (implementors.Length == 1) { persister = (IQueryable)SessionFactoryHelper.Factory.TryGetEntityPersister(implementors[0]); } } if (persister != null) { return(persister); } if (path.Type == IDENT) { throw new QuerySyntaxException(entityName + " is not mapped"); } //Keep old exception for DOT node throw new InvalidPathException("Invalid join: " + entityName); }
private IQueryable ObtainQueryable(ICriteriaQuery criteriaQuery) { IQueryable queryable = criteriaQuery.Factory.GetEntityPersister(_entityClass.FullName) as IQueryable; if (queryable == null) { queryable = SessionFactoryHelper.FindQueryableUsingImports( criteriaQuery.Factory, _entityClass.FullName); } return(queryable); }
private IQueryable ResolveEntityJoinReferencedPersister(IASTNode path) { if (path.Type == IDENT) { var pathIdentNode = (IdentNode)path; return(SessionFactoryHelper.FindQueryableUsingImports(pathIdentNode.Path)); } else if (path.Type == DOT) { var pathText = ASTUtil.GetPathText(path); return(SessionFactoryHelper.FindQueryableUsingImports(pathText)); } return(null); }
private IQueryable ResolveEntityJoinReferencedPersister(IASTNode path) { if (path.Type == IDENT) { var pathIdentNode = (IdentNode)path; // Since IDENT node is not expected for implicit join path, we can throw on not found persister return((IQueryable)SessionFactoryHelper.RequireClassPersister(pathIdentNode.Path)); } else if (path.Type == DOT) { var pathText = ASTUtil.GetPathText(path); return(SessionFactoryHelper.FindQueryableUsingImports(pathText)); } return(null); }
/// <summary> /// Get the a typed value for the given property value. /// </summary> public TypedValue GetTypedValue(ICriteria subcriteria, string propertyName, object value) { // Detect discriminator values... var entityClass = value as System.Type; if (entityClass != null) { NHibernate_Persister_Entity.IQueryable q = helper.FindQueryableUsingImports(entityClass.FullName); if (q != null && q.DiscriminatorValue != null) { // NH Different implementation : We are using strongly typed parameter for SQL query (see DiscriminatorValue comment) return(new TypedValue(q.DiscriminatorType, q.DiscriminatorValue, EntityMode.Poco)); } } // Otherwise, this is an ordinary value. return(new TypedValue(GetTypeUsingProjection(subcriteria, propertyName), value, EntityMode.Poco)); }