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