Как обновить схему, когда атрибуты Validator изменились? - PullRequest
1 голос
/ 14 ноября 2011

Я создаю свой SessionFactory так:

_configuration = LoadConfiguration(configFile);
if (_configuration == null)
{
    Fluently.Configure()
        .Database(configurer.GetConfigurer())
        .Mappings(m => m.AutoMappings
                           .Add(AutoMap
                                    .AssemblyOf<Entity>()
                                    .IgnoreBase<Entity>()))
        .ExposeConfiguration(cfg => _configuration = cfg)
        .BuildConfiguration();

    ConfigureNhibernateValidator();
    SaveConfiguration(configFile);
}
UpdateSchema();

Где мой schemaupdater такой:

public bool UpdateSchema(ISession session = null)
{
    try
    {
        SchemaValidator val = new SchemaValidator(_configuration, new Settings());
        val.Validate();
        return false;
    }
    catch
    {
        SchemaExport export = new SchemaExport(_configuration);
        if (session == null) // To be usefull with SQLite InMemory db
            export.Execute(true, true, false);
        else
            export.Execute(true, true, false, session.Connection, null);
        return true;
    }
}

И мой конфигуратор валидатора выглядит так:

private void ConfigureNhibernateValidator()
{
    var provider = new NHibernateSharedEngineProvider();
    NHibernate.Validator.Cfg.Environment.SharedEngineProvider = provider;

    var nhvConfiguration = new NHibernate.Validator.Cfg.Loquacious.FluentConfiguration();
    nhvConfiguration
       .SetDefaultValidatorMode(ValidatorMode.OverrideAttributeWithExternal)
       .Register(Assembly.GetAssembly(typeof(Entity))
       .ValidationDefinitions())
       .IntegrateWithNHibernate
           .ApplyingDDLConstraints()
           .RegisteringListeners();

    ValidatorEngine validatorEngine = provider.GetEngine();
    validatorEngine.Configure(nhvConfiguration);

    ValidatorInitializer.Initialize(_configuration, validatorEngine);
}

Я аннотировал некоторые из своих свойств объекта clr с помощью NotNull, Length (1024) и т. Д. Это нормально экспортируется в мою базу данных. Когда я что-то изменяю в моей сборке Entity, мой метод LoadConfiguration возвращает null, и генерируется новая конфигурация.

Моя проблема заключается в том, что если я изменяю Length (1024) на Length (2048), атрибут, который влияет на схему, вызов SchemaValidator.validate не вызывает исключение, и поэтому моя база данных не обновляется для отображения схемы. Что приводит меня к моему вопросу ...

Как я могу узнать, что моя база данных нуждается в обновлении для отражения моих аннотаций валидации?

...