Я не специалист в Fluent NH, но мне кажется, что ваша личная карта должна выглядеть так:
class PersonMap : ClassMap<Person>
{
public PersonMap()
{
Id(c => c.ID).GeneratedBy.Identity();
//this works fine
HasMany(c => c.Pets);
//this dosen't work, because the result contains dogs and cats
//how can I tell NHibernate to only fetch dogs or cats?
HasMany<Cat>(c => c.Cats);
HasMany<Dog>(c => c.Dogs);
}
}
Поскольку у вас есть свойство Dogs, представляющее собой IList, а не IList, и наоборот, то же самое для кошек.