- Home
- LLBLGen Pro
- LLBLGen Pro Runtime Framework
Fethcing TypedList The multi-part identifier * could not be bound exception.
Joined: 28-Aug-2008
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 !?
Joined: 28-Aug-2008
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...