public static SqlString GetSelectByUniqueKeyString(
            this IPostInsertIdentityPersister persister,
            string[] suppliedPropertyNames,
            out IType[] parameterTypes)
        {
            if (persister is ICompositeKeyPostInsertIdentityPersister compositeKeyPersister)
            {
                return(compositeKeyPersister.GetSelectByUniqueKeyString(suppliedPropertyNames, out parameterTypes));
            }

            if (suppliedPropertyNames.Length > 1)
            {
                throw new IdentifierGenerationException(
                          $"persister {persister} does not implement {nameof(ICompositeKeyPostInsertIdentityPersister)}, " +
                          $"which is required for selecting by an unique key spanning multiple properties.");
            }

            if (persister is IEntityPersister entityPersister)
            {
                var uniqueKeyPropertyNames = suppliedPropertyNames ?? DetermineNameOfPropertiesToUse(entityPersister);

                parameterTypes = uniqueKeyPropertyNames.ToArray(p => entityPersister.GetPropertyType(p));
            }
            else if (persister is IQueryableCollection collectionPersister)
            {
                parameterTypes = new[] { collectionPersister.KeyType, collectionPersister.ElementType };
            }
            else
            {
                throw new IdentifierGenerationException(
                          $"Persister type {persister.GetType()} is not supported by post insert identity persisters");
            }
#pragma warning disable 618
            return(persister.GetSelectByUniqueKeyString(suppliedPropertyNames[0]));

#pragma warning restore 618
        }