Часть 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, экземпляр которого мы создали ранее.
Готово! теперь наши мэппинги создаются автоматически и не нужно писать не строчки кода ручного мэппина, ура!
Часть 1 | Часть 2 | Часть 3 (автомэппинг)


