O Fluent Nhibernate permite que seja mapeado as classe através dessa convenção, devemos apenas dizer quais as nossas classes devem ser mapeadas.
var mapeamento = AutoMap.AssemblyOf<Dominio.Entidades.Core.Usuario>(convencoes); //Qual assembly deve ser mapeado var cfgFluent = FluentNHibernate.Cfg.Fluently.Configure(cfg).Mappings(x => x.AutoMappings.Add(mapeamento)); cfg = cfgFluent.BuildConfiguration(); this.FabricaSessao = BuildSessionFactory(cfg);
No caso acima passamos o assembly da classe Usuario, fazendo com que todas as outras classes sejam mapeadas.
public class Usuario : IEntidade { public virtual long Id { get; set; } public virtual string Nome { get; set; } }
A classe Usuário será mapeada para um tabela, onde o Id será a chave primária, e o campo Nome será um varchar.
Porém necessitamos fazer alguns refinamentos nesses mapeamentos, por exemplo caso queiramos adicionar um prefixo no nome da tabela, ou por exemplo definir o tamanho do campo Nome no banco? Teremos que adicionar os mapeamentos um a um? Ai entra a possibilidade de extensão do Fluent, todas as convençoes podem ser implementadas manualmente extendendo as convenções padrões.
public class TableNameConvention : IClassConvention { public void Apply(IClassInstance instance) { instance.Table("tb_" + instance.EntityType.Name); } }
Neste exemplo criamos uma convenção para o nome da tabela que será gerado, implementamos o IClassConvention, e setamos o nome da tabela que queremos. Todas as interfaces que podem ser implementadas estão no namespace using FluentNHibernate.Conventions.
Na hora de configurar o Fluent devemos adicionar nossas convenções antes de criar a SessionFactory.
var mapeamento = AutoMap.AssemblyOf<Dominio.Entidades.Core.Usuario>(convencoes); //Qual assembly deve ser mapeado mapeamento.Conventions.Add<TableNameConvention>(); mapeamento.Conventions.Add<PrimaryKeyNameConvention>(); var cfgFluent = FluentNHibernate.Cfg.Fluently.Configure(cfg).Mappings(x => x.AutoMappings.Add(mapeamento));
Desta forma o Fluent saberá que deverá usar nossas classes de configuração.
Essa apenas uma das maneiras que o Fluent permite fazer, temos outras mais em exemplos por ai na internet. Vale a pena dar uma olhada e verificar qual melhor se aplica ao seu projeto. Isso é muito util no caso de você já ter algumas convenções que usa e não quer mudar e para código legado.
Nenhum comentário:
Postar um comentário