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 }