1.
Mapowanie przez kod, w przypadku gdy nasze mapowanie jest rozdzielone od obiektów:public class Customer
{
public int Id { get; set; }
public string FirstName { get; set; }
}
public class CustomerMapping : ClassMapping<Customer>
{
public CustomerMapping()
{
Lazy(false);
Id<int>(x => x.Id, map => map.Generator(Generators.HighLow));
Property<string>(c => c.FirstName,
map => { map.Length(10); map.NotNullable(true); });
}
}
ModelMapper mapper = new ModelMapper();
mapper.AddMapping<CustomerMapping>();
HbmMapping mapping = mapper.CompileMappingFor(new[] { typeof(Customer) });Nasz obiekt nie jest w żaden sposób związany z klasami NHibernate.
2.
Mapowanie przez kod, w przypadku gdy nie chcemy tworzyć osobnych obiektów mapujących. public interface IClassMapping
{
void Map(ModelMapper a_mapper);
}
public class Customer : IClassMapping
{
public int Id { get; set; }
public string FirstName { get; set; }
public void Map(ModelMapper a_mapper)
{
a_mapper.Class<Customer>(m =>
{
m.Id(x => x.Id, map => map.Generator(Generators.HighLow));
m.Property(c => c.FirstName,
map => { map.Length(10); map.NotNullable(true); });
m.Lazy(false);
});
}
}Interfejs jest nam w tym przypadku potrzebny do automatyczneo namierzania klas:
private static void AddMappings()
{
ModelMapper mapper = new ModelMapper();
foreach (var asm in AssembliesToMap)
{
var types = from type in asm.GetTypes()
where !type.IsInterface
where type.IsImplementInterface(typeof(IClassMapping))
where !type.IsAbstract
select type;
foreach (var type in types)
(Activator.CreateInstance(type) as IClassMapping).Map(mapper);
}
HbmMapping mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
Configuration.AddDeserializedMapping(mapping, "MangaCrawler");
}3.
Mapowanie z wykorzystaniem atrybutów.4.
Mapowanie z wykorzystaniem XML.5.
Wykorzystanie zdarzeń klasy ModelMapper do dekorowania. Dzięki temu możemy jak mi się wydaje możemy obejść się dla większości elementów bez ręcznego mapowania. Np. możemy zdefiniować konwencję nazewnictwa kolumn w bazie, automatycznie podłączyć generatory id... Dokładnie tego nie sprawdzałem, być może jeszcze wiele innych rzeczy można ustandaryzować.
Brak komentarzy:
Prześlij komentarz