Pergunta

Eu sou novo no Nibernate, o aspecto de configuração dele sempre me pareceu excessivamente oneroso para mim. Ontem, me deparei com os recursos de mapeamento automático do Nibernato Fluente e fiquei impressionado.

Para me educar, eu me preparei o desafio de tentar o 'Introdução ao primeiro projeto' (http://wiki.fluentnhibernate.org/show/gettingstartedfirstproject) Usando AutomAppings e convenções. Eu tenho que admitir não ter muita sorte.

Para resumir meus passos:

Fiz algumas pequenas alterações no esquema de banco de dados no exemplo, principalmente para remover os sublinhados das chaves estrangeiras (ou seja, product_id para o ProductID), pois isso o traria mais alinhado com nossos padrões de nomeação de banco de dados.

Q1) Tentei escrever uma implementação de ihasmanyconvention usando a ForeignKeyConvention como exemplo, mas o método WithkeyColumn parece não existir (presumo que isso seja porque baixei a construção de ontem, então, posteriormente, o design mudou desde que o artigo foi escrito). Como faço para corrigir isso?

Também fiz algumas pequenas alterações na camada de entidades no exemplo, pois pensei que isso facilitaria, elas eram renomear o StoressTockedIn para as lojas (Product.cs) e funcionários para funcionários (Store.cs).

Meu código se parece com o seguinte:

var cfg = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
    .ConnectionString(c => c
        .Is(connectionString)))
.Mappings(m => m.AutoMappings.Add(
                AutoPersistenceModel.MapEntitiesFromAssemblyOf<Store>()
                    .Where(t => t
                        .Namespace == "FluentNHibernateTesting.Entities")
                        .ConventionDiscovery.Setup(c => c.Add<ForeignKeyConvention>())
                ))
.BuildSessionFactory();

Em seguida, tento adicionar as lojas, produtos e funcionários ao banco de dados de acordo com o exemplo de início. A exceção que recebo acontece com a confirmação e é:

O objeto faz referência a uma instância transitória não salva - salve a instância transitória antes de lavar. Tipo: fluentnhibernatetesting.entities.employee, entidade: fluentnhibernatetesting.entities.employeee

Q2) Como resolvo esse problema? Eu entendo (da minha leitura limitada) que ela tem algo a ver com a configuração dos elementos em cascata dos relacionamentos de objeto corretamente, mas estou um pouco perplexo sobre como fazer isso efetivamente usando o mapeamento automático.

P3) Existe uma data de lançamento do alvo para o projeto fluente? Eu (como presumo que muitos outros) sinto que essa é uma excelente iniciativa, mas estou atento ao usá -la, a menos que esteja em um estado estável.

Q4) É mencionado em muitos dos blogs que eles estão trabalhando constantemente em relação à paridade dos recursos em fluente com o HBN.xml. Existe uma lista desses recursos ausentes em algum lugar para ajudar na avaliação e uso dessa ferramenta?

Aprecie a ajuda com antecedência.

Foi útil?

Solução

Fiz James Gregory as mesmas perguntas em um e -mail diretamente para ele. Ele forneceu essa excelente resposta.

'Ei Paul,

1) KeyColumnNames é o que você procura.

2) Você pode fazer essa de três maneiras. Configure uma IhasManyConvention para fazer globalmente todos os relacionamentos em cascata, use uma chamada de quinze anos de chamada ou uma substituição de automóveis.

3) Estamos em testes privados do nosso lançamento 1.0 agora. Não sabe se teremos uma versão beta pública ou direto para lançar, mas isso deve acontecer nas próximas semanas.

4) É muito improvável que sejamos completamente completos com o Nibernate, não temos vontade de estar. Muitos dos recursos do NH são extremamente esotéricos e há pouco benefício para nós implementá -los. A partir de 1.0, haverá muito poucos recursos que não apoiamos que as pessoas usam regularmente. Posso dizer com confiança que todos os cenários de mapeamento comuns são atendidos e, se houver algo que não seja, você sempre pode voltar ao HBM para esse caso.

Para antecipar quaisquer comentários que nossos documentos estiverem desatualizados, a documentação será revisada por 1,0;)

James'

Obrigado James.

Outras dicas

Existe uma data de lançamento do alvo para o projeto fluente? Eu (como presumo que muitos outros) sinto que essa é uma excelente iniciativa, mas estou atento ao usá -la, a menos que esteja em um estado estável.

Você deve conseguir uma versão em funcionamento do Fluent Nibernate do seu repositório SVN agora. Eles também têm binários compilados.

Atualmente, não existem lançamentos oficiais do Nibernato Fluente. Isso não é um reflexo da qualidade, mas de nossa rápida taxa de mudança. Nossa base de código está sendo atualizada diariamente, o que faz com que lançar lançamentos oficiais um empreendimento inútil até alcançarmos a paridade do recurso com o Nibernate Core. A maioria dos recursos regulares que você usa no dia-a-dia está pronta.

http://fluentnhibernate.org/downloads

Os problemas atuais estão aqui:

http://code.google.com/p/fluent-nhibernate/issues/list

Nenhum deles parece ser assassinato. Eu acho que depende de quanto tempo você tem para experimentar.

O objeto faz referência a uma instância transitória não salva - salve a instância transitória antes de lavar. Tipo: fluentnhibernatetesting.entities.employee, entidade: fluentnhibernatetesting.entities.employeee

Se você Google Objeto faz referência a uma instância transitória não salva, você encontrará várias partidas para isso. Sua melhor aposta é começar a passar por isso e solucionar problemas. Curiosamente, pelo que li, parece que a mensagem de erro significa exatamente o que diz, ou há um relacionamento muitos ou muitos ou em cascata que não está sendo atualizado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top