Pergunta

O Nibernato Fluente não gosta disso, lançando um erro:

{"Association Referências da classe não mapeada: System.String"}

Ok, tudo bem, eu posso ver por que isso causaria um problema - mas qual é a melhor solução?

Eu realmente não quero que ele armazene uma lista delimitada de strings em um único campo, isso ficaria feio se minha lista contiver muitas strings.

Eu também não quero uma tabela 'string', por razões óbvias.

Acho que posso resolver isso envolvendo meu List<string> Dentro de uma aula, mas isso parece um pouco pesado. Estou começando a pensar que é a melhor solução.

Qual é a melhor maneira de obter o Nibernato Fluente para lidar com isso?

Espero totalmente que esses valores sejam armazenados em outra tabela. Eu pensei talvez que eu possa ter sido capaz de configurar uma convenção de automóvel que instrua Nibernate 'se você vir um class X Isso contém List<*some primitive type*>, vá em frente e crie automaticamente uma tabela de referência que mapeia esta coleção.

Parece um pouco pesado para enrolar cada coleção em uma classe. Se essa é a melhor solução, no entanto, que assim seja.

Foi útil?

Solução

Eu tive exatamente o mesmo problema algumas semanas atrás, com carros alegóricos em vez de cordas.

Como fazer-você-Automap-Listfloat-ou-Float-With-Fluent-Nibernate

Acontece que o Automapping não funciona com tipos primitivos.

Editar - isso não é mais verdade - a equipe do FNH resolveu o problema

Há muito código de amostra na resposta aceita à minha pergunta, mas o ponto principal é adicionar uma substituição para suas listas de tipos primitivos ("Rawy" no exemplo abaixo):

public class DlsAppOverlordExportRunData
{
    public virtual int Id { get; set; }
    // Note: List<float> needs overrides in order to be mapped by NHibernate.
    // See class DlsAppOverlordExportRunDataMap.
    public virtual IList<float> RawY { get; set; }
}


// Must be in different namespace from DlsAppOverlordExportRunData!!!
public class DlsAppOverlordExportRunDataMap : IAutoMappingOverride<DlsAppOverlordExportRunData>
{
    public void Override(AutoMapping<DlsAppOverlordExportRunData> mapping)
    {
        // Creates table called "RawY", with primary key
        // "DlsAppOverlordExportRunData_Id", and numeric column "Value"
        mapping.HasMany(x => x.RawY)
               .Element("Value");
    }
}

Eu esperaria que a mesma abordagem funcione com ilistas de cordas.

Outras dicas

Desde que publiquei minha primeira resposta, a equipe Fluent Nibernate resolveu esse problema.

Agora você pode automaticamente ilistas de tipos de valor C# (strings, ints, carros alegóricos, etc.).

Apenas certifique -se de ter uma versão recente do FNH.

Pense dessa maneira ... como você faria isso sem hibernar? Bem, você provavelmente teria uma mesa com uma coluna de chave estrangeira e cordas? Agora, como você faz isso com o Hibernate? Você configura outra classe com uma propriedade de muitos para um e string. Então você mapeia uma coleção dessa classe.

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