Início > Dicas / Tips > NHibernate 3.2.0 GA – Mapping By Code

NHibernate 3.2.0 GA – Mapping By Code

Transcrevo em português um exemplo do blog do Fabio Maulo: http://fabiomaulo.blogspot.com/2011/07/nhibernate-playing-with-mapping-by-code.html

Para responder algumas questões sobre Map By Code na nova versão do NHibernate será implementado o domínio abaixo:

// Classe base com atributo ID
public class Entity
 {
     public virtual int Id { get; set; }
 }
// Classe CLIENTE
public class Customer : Entity
 {
     public virtual string CommercialName { get; set; }
     public virtual string TaxId { get; set; }
     public virtual IEnumerable<Order> Orders { get; set; }
 }
// Classe PEDIDO
public class Order : Entity
 {
     public virtual Customer Customer { get; set; }
     public virtual DateTime EmissionDay { get; set; }
     public virtual IEnumerable<OrderItem> Items { get; set; }
 }
// Classe ITEM DO PEDIDO
public class OrderItem : Entity
 {
     public virtual Order Order { get; set; }
     public virtual string Product { get; set; }
     public virtual decimal Price { get; set; }
 }

Mapeando o Domínio:

// Mapeando classe base
public class EntityMapping<T> : ClassMapping<T> where T : Entity
 {
     public EntityMapping()
     {
         Id(x => x.Id);
     }
 }
// Herdando mapeamento da classe base
public class CustomerMapping : EntityMapping<Customer>
 {
     public CustomerMapping()
     {
         Property(x => x.CommercialName);
         NaturalId(map => map.Property(x => x.TaxId));
         Bag(x => x.Orders, map => map.Key(km => km.Column("CustomerId")));
     }
 }
public class OrderMapping : EntityMapping<Order>
 {
     public OrderMapping()
     {
         ManyToOne(x => x.Customer, map => map.Column("CustomerId"));
         Property(x => x.EmissionDay, map => map.Type(NHibernateUtil.Date));
         Bag(x => x.Items, map => map.Key(km => km.Column("OrderId")));
     }
 }
public class OrderItemMapping : EntityMapping<OrderItem>
 {
     public OrderItemMapping()
     {
         ManyToOne(x => x.Order, map => map.Column("OrderId"));
         Property(x => x.Product);
         Property(x => x.Price);
     }
 }

Adicionando mapeamentos ao ModelMapper:
Uma das formas de se aplicar o mapeamento é utilizando a classe ModelMapper.

var mapper = new ModelMapper();
 mapper.AddMappings(Assembly.GetExecutingAssembly().GetExportedTypes());
HbmMapping mapeamentoDominio = mapper.CompileMappingForAllExplicitlyAddedEntities();

E é só, agora e só adicionar o mapeamentoDominio ao objeto de configuração do NHibernate antes de construir a factory de sessões utilizando o BuildSessionFactory.

var configuration = new Configuration();
 configuration.DataBaseIntegration(c =>
 {
     c.Dialect<MsSql2008Dialect>();
     c.ConnectionString = @"Data Source=localhost\SQLEXPRESS;Initial Catalog=IntroNH;Integrated Security=True;Pooling=False";
     c.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
     c.SchemaAction = SchemaAutoAction.Create; // Recria a estrutura do banco automaticamente.
 });
 configuration.AddMapping(mapeamentoDominio);

var factory = configuration.BuildSessionFactory();
Anúncios
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixar uma Anotação

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

dotnettips.wordpress.com/

Helping Programmers Since 1994

Viagem e Voo

Dicas para viagens, férias e voos nacionais e internacionais

Ivan Guimarães Meirelles

Analista Desenvolvedor

Void Podcast

Vazio e sem retorno de valor

Elemar DEV

Negócios, tecnologia e desenvolvimento

2,000 Things You Should Know About WPF

Everything a WPF Developer Needs to Know, in Bite-Sized Chunks

blog

so long

Fernando Franzini Blog

Engenharia de Software e Arquitetura Ágil

Gabriel RB.net

Blog técnico, com dicas, códigos, novidades e problemas do dia-a-dia programando.

Alexandre Valente's Blog

Experiências em tecnologia e assuntos diversos

%d blogueiros gostam disto: