Часть 1 | Часть 2 | Часть 3 (автомэппинг)
Совсем забыл в предыдущей части коснуться такой замечательной возможности Fluent NHibernate, как автомэппинг.
Здесь вкратце рассмотрим ее.
Вы уже помните, что мы делали для мэппинга сущностей?
Создавали классы-наследники от ClassMap<>, указывали свойства для мэппинга и тп.
примерно так:
public class CustomerMap: ClassMap { public CustomerMap() { Id(x => x.UID).GeneratedBy.Guid(); Map(x => x.Comment); Map(x => x.FirstName).Not.Nullable(); Map(x => x.SecondName); HasMany(x => x.Orders) .KeyColumns.Add("CustomerID") .Inverse() .Cascade.All(); } }
Для экономии времени и минимизации кода всего этого можно избежать, создав код автомэппинга:
AutoPersistenceModel mappings = AutoMap.AssemblyOf() .Setup(map => map.FindIdentity = property => property.Name == "UID") .Conventions.Setup(c => { c.Add(); c.Add(); c.Add(); }) .IgnoreBase(); autoMappings.CompileMappings();
Что такое Conversions ?
Конверсии помогают нам задать правила для создания автомэппинга.
Вот некоторые из них:
public class CustomForeignKeyConvention : ForeignKeyConvention { protected override string GetKeyName(PropertyInfo property, Type type) { if (property == null) return type.Name + "_FK"; return property.Name + "_FK"; } } public class DefaultStringLengthConvention : IPropertyConvention { public void Apply(IPropertyInstance instance) { instance.Length(250); } } public class IdentityGeneratorConvention : IIdConvention { #region IConvention<IIdentityInspector,IIdentityInstance> Members public void Apply(IIdentityInstance instance) { instance.GeneratedBy.Guid(); } #endregion }
Думаю здесь все понятно.
Теперь немного нужно изменить конфигурацию:
Config = Fluently.Configure(). Database( MsSqlConfiguration .MsSql2008 .ConnectionString(x => x .Server(@".\SQLEXPRESS") .Database("Orders") .TrustedConnection()) .UseReflectionOptimizer()) .Mappings(m => m.AutoMappings.Add(mappings)) .BuildConfiguration();
где mappings — класс AutoPersistenceModel, экземпляр которого мы создали ранее.
Готово! теперь наши мэппинги создаются автоматически и не нужно писать не строчки кода ручного мэппина, ура!