Como posso mapear uma lista de strings para minha entidade usando o NHibernate?
-
09-06-2019 - |
Pergunta
Eu tenho duas tabelas no meu banco de dados:Artigos e Tags
As tabelas Tags consistem em ArticleID (chave estrangeira) e uma Tag (varchar).
Agora preciso mapear tags de artigos em uma coleção somente leitura na entidade Article, usando tags IList ou tags ReadOnlyCollection.
Consultei o material de referência do NHibernate, mas não consigo descobrir quando usar Set, Bag e as outras coleções do Nhibernate.Já vi exemplos usando a coleção ISet, mas realmente não gosto de vincular minhas classes de entidade a um tipo NHibernate.
Como posso fazer o mapeamento no NHibernate?
editar:Acabei usando um <bag>
em vez disso, como não requer um índice:
<bag name="Tags" table="Tag" access="nosetter.camelcase" lazy="false">
<key column="ArticleId" />
<element column="Tag" type="System.String" />
</bag>
Solução
O tipo de coleção a ser usada no mapeamento depende de como você deseja representar a coleção no código.As configurações são mapeadas assim:
- O
<list>
Mapas diretamente para um ilista. - O
<map>
mapeia diretamente para um IDictionary. - O
<bag>
mapeia para um IList.A não cumpre completamente a interface ilist porque o método Add () não é garantido para retornar o índice correto.Um objeto pode ser adicionado a um<bag>
sem inicializar o ilista.Certifique -se de ocultar o ilista dos consumidores da sua API ou torná -lo bem documentado. - O
<set>
mapeia para um Iesi.Collections.ISet.Essa interface faz parte do Asi.
então se você quiser que um IList seja retornado, você usaria o <list>
mapeamento.No seu caso, eu provavelmente mapearia usando o <list>
mapeamento.