Como posso usar o Automapping do Fluent NHibernate com várias listas do mesmo tipo em uma entidade?

Parece que o NHibernate não pode automatizar mais de um IList de um determinado tipo em uma entidade.

Considere as duas entidades a seguir (com base no código de exemplo Examples.FirstProject incluído no código-fonte do Fluent NHibernate).

public class Employee
{
    public virtual int Id { get; private set; }
    public virtual string FirstName { get; set; }
    public virtual string LastName { get; set; }
}

public class Store
{
    public virtual int Id { get; private set; }
    public virtual IList<Employee> Staff { get; set; }
    public virtual IList<Employee> Managers { get; set; }
}

Este parece ser um modelo de objeto perfeitamente válido - cada loja tem vários funcionários e vários funcionários gerentes.

Mas quando eu automatizo, as listas Staff e Managers são armazenadas na tabela Employee, todas com a mesma chave estrangeira.

Employee Table

Id FirstName LastName Store_id 
3  Daisy     Harrison   1 
4  Jack      Torrance   1 
5  Sue       Walkters   1 
6  Tom       Tommorow   1 
7  Dick      Diggler    1 

O resultado líquido é que, quando os dados são lidos de volta do banco de dados, as listas Equipe e Gerentes são preenchidas comcada linha na tabela.

Isso parece um bug no Automapping para mim, mas eu sou relativamente novo no NHibernate de qualquer forma, e não sei totalmente quais são suas limitações ainda.

Em qualquer caso,Como posso fazer o NHibernate tratar as duas listas como distintas?

Se possível, agradeço um fragmento de código do Automapping que lide diretamente com o código de amostra que forneci (por exemplo, algo como "coloque essa substituição exata na seção .Mappings do seu CreateSessionFactory").

Isto é porque eu sou apenas um pouco familiarizado com Automapping, e não familiarizado com as formas mais antigas de fazer as coisas, o que significa que eu não posso "preencher os espaços em branco" muito bem ainda.

Mas se você só tem tempo para me apontar na direção certa, isso também seria útil.

Aqui está o meu código CreateSessionFactory, para dar algum contexto:

    private static ISessionFactory CreateSessionFactory()
    {
        ISessionFactory sessionFactory = null;

        const string autoMapExportDir = "AutoMapExport";
        if( !Directory.Exists(autoMapExportDir) )
            Directory.CreateDirectory(autoMapExportDir);

        try
        {
            var autoPersistenceModel = 
                AutoMap.AssemblyOf<Product>()
                        .Where(t => t.Namespace == "Examples.FirstProject.Entities")
                        .Conventions.Add( DefaultCascade.All() )
                ;

            sessionFactory = Fluently.Configure()
                .Database(SQLiteConfiguration.Standard
                              .UsingFile(DbFile)
                              .ShowSql()
                         )
                .Mappings(m => m.AutoMappings.Add(autoPersistenceModel)
                                             .ExportTo(autoMapExportDir)
                         )
                .ExposeConfiguration(BuildSchema)
                .BuildSessionFactory()
                ;
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
        }

        return sessionFactory;
    }

questionAnswers(1)

yourAnswerToTheQuestion