Fethcing TypedList The multi-part identifier * could not be bound exception.

Posts   
 
    
Posts: 23
Joined: 28-Aug-2008
# Posted on: 22-Feb-2010 15:57:28   

LLBLGEN Version 2.6 Final, October 9th 2009, ORMSupport Class v2.0.50727

Hi I'm having an error.

I have a Record base table and Member table inherit's from record and some other tables. I have a typed list "MemberList".

Fetching this typed list:


public ITypedListLgp2 GetFormTypedList(TypedListTypes listType, long UserId) {
            ITypedListLgp2 list = daHelper.CreateNewList(listType); // Create requested list by listType (defined enum)
            IPredicateExpression filter = daHelper.CreateTypeFilterByListName(list.ToString()); // Creates record type filter if entity inherited from the record entity, daHelper function below
            IRelationPredicateBucket bucket = new RelationPredicateBucket();
            int llblgenEntityTypeValue = (int)daHelper.ListTypeToEntityType(listType);
            if (daHelper.EntityIsInherited(llblgenEntityTypeValue)) { // Check is requested list main entity is inherited from Record
                UserEntity user = GetUser(UserId); // Get Current User Entity
                bucket = daHelper.CreateUserBucket(user); // daHelper function below
                daHelper.MergeFilter(bucket.PredicateExpression, filter); // daHelper function below
            } else {
                bucket.PredicateExpression.Add(filter);
            }
            adapter.FetchTypedList(list.GetFieldsInfo(), (DataTable)list, bucket, true);
            return list;
        }

/// daHelper Functions Start

public IPredicateExpression CreateTypeFilterByListName(string ListName) {
            IPredicateExpression filter = null;
            TypedListTypes listType = (TypedListTypes)Enum.Parse(typeof(TypedListTypes), ListName);
            EntityType TypeOfEntity = ListTypeToEntityType(listType);
            filter = CreateTypeFilter((int)TypeOfEntity);
            return filter;
        }


public IRelationPredicateBucket CreateUserBucket(UserEntity user) {
            IRelationPredicateBucket bucket = new RelationPredicateBucket();
            //
            //bucket.Relations.ObeyWeakRelations = true;
            if (user.Role.Organization.FIsRoot == false) { // If not root organization user restrict user
                bucket.Relations.Add(RecordEntity.Relations.UserEntityUsingFkCreatedBy);
                bucket.Relations.Add(UserEntity.Relations.RoleEntityUsingFkRole);
                bucket.PredicateExpression.Add(RoleFields.FkOrganization == user.Role.Organization.PkId);
                //bucket.PredicateExpression.Add(OrganizationFields.PkId == user.Role.Organization.PkId);
            }
            //
            return bucket;
        }

public IPredicateExpression MergeFilter(IPredicateExpression firstFilter, IPredicateExpression secondFilter) {
            //IPredicateExpression filter = new PredicateExpression();
            if (firstFilter == null) return null;
            if (secondFilter != null) {
                if (secondFilter.Count > 0) {
                    if (firstFilter.Count > 0) firstFilter.AddWithAnd(secondFilter);
                    else firstFilter.Add(secondFilter);
                }
            }
            return firstFilter;
        }

// dahelper Functions End

When I call GetFormTypedList function for "MemberList" it throw "An exception was caught during the execution of a retrieval query: The multi-part identifier "passref.dbo.pr_organization.f_name" could not be bound.. Check InnerException, QueryExecuted and Parameters of this exception to examine the cause of this exception." Exception.

QueryExecuted :

"\r\n\tQuery: SELECT [LPA_L2].[pk_id] AS [PkId], [LPA_L2].[fk_organization] AS [FkOrganization], [passref].[dbo].[pr_organization].[f_name] AS [FOrganizationName], [LPA_L2].[fk_division] AS [FkDivision], [LPA_L3].[f_name] AS [FDivisionName], [LPA_L2].[fk_group] AS [FkGroup], [LPA_L4].[f_name] AS [FGroupName], [LPA_L2].[fk_title] AS [FkTitle], [LPA_L5].[f_name] AS [FTitleName], [LPA_L2].[f_is_active] AS [FisActive], [LPA_L2].[f_national_id] AS [FnationalId], [LPA_L2].[f_employee_id] AS [FemployeeId], [LPA_L2].[f_student_id] AS [FstudentId], [LPA_L2].[f_name] AS [Fname], [LPA_L2].[f_sirname] AS [Fsirname], [LPA_L2].[f_e_mail] AS [Femail], [LPA_L2].[f_gsm] AS [Fgsm], [LPA_L2].[f_work_phone] AS [FworkPhone] FROM (((( [passref].[dbo].[pr_record] [LPA_L1]  LEFT JOIN [passref].[dbo].[pr_member] [LPA_L2]  ON  [LPA_L1].[pk_id]=[LPA_L2].[pk_id]) LEFT JOIN [passref].[dbo].[pr_division] [LPA_L3]  ON  [LPA_L1].[pk_id]=[LPA_L3].[pk_id]) LEFT JOIN [passref].[dbo].[pr_group] [LPA_L4]  ON  [LPA_L1].[pk_id]=[LPA_L4].[pk_id]) LEFT JOIN [passref].[dbo].[pr_title] [LPA_L5]  ON  [LPA_L1].[pk_id]=[LPA_L5].[pk_id]) WHERE ( ( ( [LPA_L1].[fk_type] = @FkType1)))\r\n\tParameter: @FkType1 : Byte. Length: 1. Precision: 3. Scale: 0. Direction: Input. Value: 11.\r\n"

But its wrong.

Wright SQL is:


declare @FkType1 smallint;
set @FkType1 = 0;
SELECT 
[LPA_L2].[pk_id] AS [PkId], [LPA_L2].[fk_organization] AS [FkOrganization], 
[LPA_L6].[f_name] AS [FOrganizationName], [LPA_L2].[fk_division] AS [FkDivision], 
[LPA_L3].[f_name] AS [FDivisionName], [LPA_L2].[fk_group] AS [FkGroup], [LPA_L4].[f_name] AS [FGroupName], 
[LPA_L2].[fk_title] AS [FkTitle], [LPA_L5].[f_name] AS [FTitleName], [LPA_L2].[f_is_active] AS [FisActive], 
[LPA_L2].[f_national_id] AS [FnationalId], [LPA_L2].[f_employee_id] AS [FemployeeId], [LPA_L2].[f_student_id] AS [FstudentId], 
[LPA_L2].[f_name] AS [Fname], [LPA_L2].[f_sirname] AS [Fsirname], [LPA_L2].[f_e_mail] AS [Femail], [LPA_L2].[f_gsm] AS [Fgsm], 
[LPA_L2].[f_work_phone] AS [FworkPhone] 
FROM (
    (
        ((
            ([passref].[dbo].[pr_record] [LPA_L1]  INNER JOIN [passref].[dbo].[pr_member] [LPA_L2]  ON  [LPA_L1].[pk_id]=[LPA_L2].[pk_id]) 
            LEFT JOIN [passref].[dbo].[pr_organization] [LPA_L6]  ON  [LPA_L2].[fk_organization]=[LPA_L6].[pk_id]) 
            LEFT JOIN [passref].[dbo].[pr_division] [LPA_L3]  ON  [LPA_L2].[fk_division]=[LPA_L3].[pk_id]) 
        LEFT JOIN [passref].[dbo].[pr_group] [LPA_L4]  ON  [LPA_L2].[fk_group]=[LPA_L4].[pk_id]) 
    LEFT JOIN [passref].[dbo].[pr_title] [LPA_L5]  ON  [LPA_L2].[fk_title]=[LPA_L5].[pk_id])
--WHERE ( ( ( [LPA_L1].[fk_type] = @FkType1)))

I am attaching Database SQL files and LLBLGEN Project...

Am I doing something wrong !?

Posts: 23
Joined: 28-Aug-2008
# Posted on: 22-Feb-2010 16:46:22   

Sorry My Bad,

 IRelationPredicateBucket bucket = new RelationPredicateBucket();

At this line I have to get bucket from list first:

IRelationPredicateBucket bucket = list.GetRelationInfo();

and last version of function:


public ITypedListLgp2 GetFormTypedList(TypedListTypes listType, long UserId) {
            ITypedListLgp2 list = daHelper.CreateNewList(listType);
            IRelationPredicateBucket bucket = list.GetRelationInfo();
            IPredicateExpression filter = daHelper.CreateTypeFilterByListName(list.ToString());
            IRelationPredicateBucket userBucket = new RelationPredicateBucket();
            int llblgenEntityTypeValue = (int)daHelper.ListTypeToEntityType(listType);
            if (daHelper.EntityIsInherited(llblgenEntityTypeValue)) {
                UserEntity user = GetUser(UserId);
                userBucket = daHelper.CreateUserBucket(user);
                daHelper.MergeBucket(bucket, userBucket);
                daHelper.MergeFilter(bucket.PredicateExpression, filter);
            } else {
                bucket.PredicateExpression.Add(filter);
            }
            adapter.FetchTypedList(list.GetFieldsInfo(), (DataTable)list, bucket, true);
            return list;
        }

// daHelper Functions Start

public IRelationPredicateBucket MergeBucket(IRelationPredicateBucket firstBucket, IRelationPredicateBucket secondBucket) {
            IRelationPredicateBucket bucket = new RelationPredicateBucket();
            if (firstBucket != null) {
                foreach (IRelation rel in firstBucket.Relations) {
                    bucket.Relations.Add(rel);
                }
                if (firstBucket.PredicateExpression.Count > 0) bucket.PredicateExpression.Add(firstBucket.PredicateExpression);
            }
            if (secondBucket != null) {
                foreach (IRelation rel in secondBucket.Relations) {
                    bucket.Relations.Add(rel);
                }
                if (secondBucket.PredicateExpression.Count > 0) {
                    if (bucket.PredicateExpression.Count > 0) bucket.PredicateExpression.AddWithAnd(secondBucket.PredicateExpression);
                    else bucket.PredicateExpression.Add(secondBucket.PredicateExpression);
                }
            }
            return bucket;
        }

// daHelper Functions End

And it works...