Быстрый старт с Fluent NHibernate. Часть 3. Автомэппинг

Часть 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 (автомэппинг)

Рейтинг
( Пока оценок нет )
Загрузка ...