Использование многомерных отображений классов в NHibernate - PullRequest
3 голосов
/ 04 июля 2011

Я пытаюсь использовать новую функцию отображения классов, которую мы использовали для выхода из Fluent NHibernate.Но я застрял на том, как получить сопоставления классов в конфигурации.Я прочитал блог Ф. Мауло (http://fabiomaulo.blogspot.com/2011/04/me-on-fluent-nhibernate.html), но не могу заставить его работать.У кого-нибудь из вас есть информация о том, как добавить это в конфигурацию NH?

С уважением,

Нашел ответ, основываясь на реакции

  foreach (string mappingAssembly in MappingsAssembly.Split(','))
        {
            if (string.IsNullOrEmpty(mappingAssembly)) continue;
            Assembly assembly = Assembly.Load(mappingAssembly);
            types.AddRange(assembly.GetTypes());
            //  configuration.AddAssembly(assembly);
        }
        configuration.DataBaseIntegration(x => GetDatabaseConfig(x));

        ModelMapper mapper = new ModelMapper();

        mapper.AddMappings(types);
        var compiledMapping = mapper.CompileMappingForAllExplicitAddedEntities();

        configuration.AddMapping(compiledMapping);

Ответы [ 2 ]

1 голос
/ 18 октября 2011

Если вы уже используете Fluent, проще всего будет сохранить отдельные файлы сопоставления и загрузить их все при запуске.Итак, у меня есть класс инициализации, который определяет переменную уровня класса

    private ModelMapper _mapper = new ModelMapper();

, затем я вызываю Initialize ()

    public void Initialize()
    {
        Configure = new Configuration();
        Configure.SessionFactoryName(System.Configuration.ConfigurationManager.AppSettings["SessionFactoryName"]);
        Configure.DataBaseIntegration(db =>
                                      {
                                        db.Dialect<MsSql2008Dialect>();
                                        db.Driver<SqlClientDriver>();
                                        db.KeywordsAutoImport = Hbm2DDLKeyWords.AutoQuote;
                                        db.IsolationLevel = IsolationLevel.ReadCommitted;
                                        db.ConnectionStringName = ConnectionStringName;
                                        db.BatchSize = 20;
                                        db.Timeout = 10;
                                        db.HqlToSqlSubstitutions = "true 1, false 0, yes 'Y', no 'N'";
                                      });
        Configure.SessionFactory().GenerateStatistics();

        Map();
    }

, тогда мой метод Map () такой

Мне нравится передавать имя моей сборочной карты через мои appSettings.

1 голос
/ 04 июля 2011

Вы можете попробовать что-то в этом духе:

ModelMapper mapper = new ModelMapper();
// your mappings by code
Type[] types = new Type[] {}; // your mapped types here
// compile mappings
HbmMapping mapping = mapper.CompileMappingFor(types);
// create configuration
Configuration cfg = new Configuration();
// add mappings to config
cfg.AddDeserializedMapping(hbm,"documentname");

Просто помните, что сопоставление с помощью кода дает вам довольно много новых возможностей: например: вы можете получить список сопоставленных типов с помощью Assembly.GetTypes().

...