Почему Override () не работает в NHibernate Fluent - PullRequest
0 голосов
/ 06 ноября 2011

Я пытаюсь установить уникальное ограничение для столбца LoginName таблицы User.Вот мой код:

    public FluentConfiguration GetNHConfig()
    {
        var cfg = new FreeflyingConfiguration();
        return Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2005.ConnectionString(_connStr))
            .Mappings(m => m.AutoMappings
                .Add(AutoMap.AssemblyOf<LogOfArticle>(cfg))
                .Add(AutoMap.AssemblyOf<LogOfUser>(cfg))
            // here is the problem, I think
                .Add(AutoMap.AssemblyOf<User>(cfg).UseOverridesFromAssemblyOf<UserMappingOverride>())
                .Add(AutoMap.AssemblyOf<Role>(cfg))
                .Add(AutoMap.AssemblyOf<Profile>(cfg))
                .Add(AutoMap.AssemblyOf<Blog>(cfg))
                .Add(AutoMap.AssemblyOf<Comment>(cfg)));
    }


public class UserMappingOverride : IAutoMappingOverride<User>
{
    public void Override(AutoMapping<User> mapping)
    {
        // breakpoint is set here and can be hit every time
        mapping.Map(x => x.LoginName).Not.Nullable();
        mapping.Map(x => x.Email).Unique();
        mapping.Map(x => x.Profile.BlogUrl).Unique();
    }

}

Таблицы могут быть сгенерированы, и каждый раз может быть получен разбивочный элемент в строке "".Но в базе данных нет никаких изменений, что означает создание ограничения Unique, независимо от того, что я использую UpdateSchema () или BuildSchema ().

Кстати, ошибок при выполнении

Так что найти причину сложнее.Но любое предложение приветствуется!

1 Ответ

0 голосов
/ 06 ноября 2011

Действительно ли User, Role, Profile и т.д. находятся в разных сборках?Если это не так, вам нужен только один .Add(AutoMap.AssemblyOf<T>().Это может быть вашей проблемой, потому что это может перезаписывать ваши переопределения при последующих вызовах.Я не так уж хорошо знаком с переопределениями, но стоит попробовать.

return Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2005.ConnectionString(_connStr))
        .Mappings(m => m.AutoMappings
            .Add(AutoMap.AssemblyOf<User>(cfg)
            .UseOverridesFromAssemblyOf<UserMappingOverride>());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...