Como dizer NHibernate para mapear um-para-muitos relação com List e não IList ?
-
23-08-2019 - |
Pergunta
Can I alguma forma dizer NHibernate para mapear meu relacionamento um-para-muitos para uma propriedade que é do tipo lista em vez do IList interface?
Eu sei que NHibernate usa sua própria IList-implementação para carregamento lento, mas eu não preciso desse recurso. Em vez disso eu preciso de uma classe que pode ser serializado, que eu não pode realizar usando a interface IList em vez de concreto Lista de classe.
Solução
A resposta simples não é, você não pode dizer NHibernate para uso List<T>
. Este pergunta anterior discute com mais detalhes.
O melhor artigo que pude encontrar sobre a serialização NHibernate objetos é voltada para usuários WCF.
Outras dicas
Se você realmente precisar fazer isso sua única opção real é mudar sua estratégia de serialização.
Você pode usar o atributo DataContract em System.Runtime.Serialization em vez do atributo de serialização padrão. Isto irá apoiar a serialização de interfaces.
Se você precisar usar a serialização padrão, então você pode usar uma propriedade separada para armazenar os valores que deseja ser serializado e simplesmente preenchê-lo na serialização:
//NHibernate property
public virtual IList<Entity> Entities
{
get;
set;
}
//Serialized property
public List<Entity> SerializedEntities
{
get;
set;
}
[OnSerializing]
void DoStuff(StreamingContext context)
{
SerializedEntities = // Whatever you want to serialize...
}