Hi Jon
Here is the AddEntityCriteria() source code.Pl let me know if u need
any more info. Thanks
private void AddEntityCriteria(ICriteria parentCriteria, string alias,
string entityTypeName, int? entityId)
{
if (!string.IsNullOrEmpty(entityTypeName) ||
entityId.HasValue)
{
string setAlias = "ASI";
ICriteria entityCriteria =
parentCriteria.CreateCriteria(
string.Format("{0}.{1}", alias,
enumAttributeInstance.AttributeSetInstance), setAlias,
JoinType.InnerJoin);
if (!string.IsNullOrEmpty(entityTypeName))
{
entityCriteria.Add(new
NHibernate.Expression.EqExpression(
string.Format("{0}.{1}", setAlias,
enumAttributeSetInstance.EntityTypeName), entityTypeName));
}
if (entityId.HasValue)
{
entityCriteria.Add(new
NHibernate.Expression.EqExpression(
string.Format("{0}.{1}", setAlias,
enumAttributeSetInstance.EntityId), entityId.Value));
}
}
}
On Nov 11, 5:38 pm, "Jon Palmer" <[EMAIL PROTECTED]> wrote:
> What does AddEntityCriteria look like and how does it use the entryIds?
>
>
>
> -----Original Message-----
> From: [email protected] [mailto:[EMAIL PROTECTED] On
>
> Behalf Of Jatin
> Sent: Monday, November 10, 2008 6:38 PM
> To: nhusers
> Subject: [nhusers] System.InvalidOperationException. Collection was
> modified; enumeration operation may not execute
>
> Hi All
>
> I get the following exception when using Criteria objects in
> NHibernate. The error is only coming up in production and not in Dev
> or UAT. I am stumped as cant replicate the error and need to fix this
> asap. The error and the code resulting in the error are below. Any
> help will be greatly appreciated. I am hitting the database multiple
> times with the same Nhibernate session. Is that the problem. Thanks
> Jatin.
>
> The error :
>
> Base exception:
> System.InvalidOperationException
> Collection was modified; enumeration operation may not execute.
>
> Stack Trace:
> at System.Collections.Hashtable.HashtableEnumerator.MoveNext()
> at NHibernate.Impl.Printer.ToString(IEnumerator enumerator)
> at NHibernate.Impl.SessionImpl.FlushEverything()
> at NHibernate.Impl.SessionImpl.AutoFlushIfRequired(ISet
> querySpaces)
> at NHibernate.Impl.SessionImpl.Find(CriteriaImpl criteria, IList
> results)
> at NHibernate.Impl.SessionImpl.Find[T](CriteriaImpl criteria)
> at NHibernate.Impl.CriteriaImpl.List[T]()
> at
> GrantEd.UtilityServices.ExtendedAttribute.AttributeInstancePathEvaluator
> .InternalEvaluate(List`1
> entities) in C:\UserData\SEMISPT\Source\Development\UtilityServices
> \ExtendedAttribute\GrantEd.UtilityServices.ExtendedAttribute\Controller
> \AttributeInstancePathEvaluator.cs:line 121
>
> The piece of code that results in the error:
>
> public IAttributeInstances InternalEvaluate(List<KeyValuePair<string,
> int?>> entities)
> {
> IAttributeInstances attributeInstances = new
> AttributeInstances();
> using (ISession session =
> NHibernateSessionManager.Instance.GetSession<AttributeInstance>(_session
> ))
> {
> // Based on List<KeyValuePair<string, int?>> of
> entities, Get a list per parameter limit
> //(1000 parameters for an IN condition) of List<int?>
> entityIds.
> Dictionary<string, List<List<int?>>>
> collectionOfEntityIdsPerParameterLimitByEntityType =
> GetCollectionOfEntityIdsPerParameterLimitByEntityType(entities);
>
> string alias = "E";
>
> // In case no entities provided, still need to return
> records matching
> // AttributePath
> if (entities == null || entities.Count == 0)
> {
> ICriteria criteria =
> InitialiseCommonCriteria(session);
> return new
> AttributeInstances(criteria.List<AttributeInstance>());
> }
>
> // foreach entityType - loop through each List
> containg List<int?> items per parameter limit
> // and hit the database and load the
> IAttributeInstances for each list. Then Merge it and when
> // looped through all return the merged
> IAttributeInstances.
> // Note: The Reason of seperate hits to the database
> with each list of 1000 or less parameters in
> // the IN condition is to meet the limitation of
> parameter size in stored procedures which is //
> 2100. We had attempted to hit database in one go with seperate IN
> conditions each with a 1000
> // parameters or less but that resulted in an error as
> soon as number of parameters went to more
> // than 2100.
>
> foreach (string entityType in
> collectionOfEntityIdsPerParameterLimitByEntityType.Keys)
> {
> foreach (List<int?> entityIds in
> collectionOfEntityIdsPerParameterLimitByEntityType[entityType])
> {
> ICriteria criteria =
> InitialiseCommonCriteria(session);
>
> // Add Entity Crieria
> if (entityIds != null)
> {
> AddEntityCriteria(criteria, alias,
> entityType, entityIds);
> }
>
> // Now that the criteria has been built
> execute it to resolve the attribute instances
> // and merge it to the running
> IAttributeInstances List
> attributeInstances.Merge(new
> AttributeInstances(criteria.List<AttributeInstance>()));
> }
> }
> }
>
> return attributeInstances;
> }- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"nhusers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/nhusers?hl=en
-~----------~----~----~----~------~----~------~--~---