/// <summary> /// Get collection persisters by the given query spaces. /// </summary> /// <param name="factory">The session factory.</param> /// <param name="spaces">The query spaces.</param> /// <returns>Unique list of collection persisters, if <paramref name="spaces"/> is <c>null</c> or empty then all persisters are returned.</returns> public static ISet <ICollectionPersister> GetCollectionPersisters(this ISessionFactoryImplementor factory, ISet <string> spaces) { if (factory is SessionFactoryImpl sfi) { return(sfi.GetCollectionPersisters(spaces)); } ISet <ICollectionPersister> collectionPersisters = new HashSet <ICollectionPersister>(); foreach (var roleName in factory.GetAllCollectionMetadata().Keys) { var collectionPersister = factory.GetCollectionPersister(roleName); if (spaces == null || spaces.Count == 0 || collectionPersister.CollectionSpaces.Any(x => spaces.Contains(x))) { collectionPersisters.Add(collectionPersister); } } return(collectionPersisters); }