Получить имена таблиц от Fluent Nhibernate - PullRequest
6 голосов
/ 23 декабря 2010

После того как вы настроили свои отображения в беглом nhibernate, есть ли способ получить имя таблицы для сущности из типа класса?

Я читал в обычном nhiberante, что вы можете сделать что-то вроде cfg.GetClassMapping(typeof (Employee)),Я хотел бы сделать то, что нужно для получения имени таблицы базы данных.

Возможно ли это в качестве стандарта или как мне поступить?

Ответы [ 4 ]

10 голосов
/ 23 марта 2012

Свободный путь гибернации:

var userMetadata = sessionFactory.GetClassMetadata(typeof(SomeEntity)) as NHibernate.Persister.Entity.AbstractEntityPersister;
var cols = userMetadata.KeyColumnNames;
var table = userMetadata.TableName;

, где sessionFactory имеет тип ISessionFactory.

2 голосов
/ 27 июня 2013

Предполагая, что вы сделали это в какой-то момент:

FluentNHibernate.Cfg.FluentConfiguration fluentConfig = FluentNHibernate.Cfg.Fluently.Configure();

Тогда все, что вам нужно сделать, это:

string tableName = fluentConfig.BuildConfiguration().GetClassMapping(typeof (One of your data entities)).Table.Name;

Отлично сработало в моей реализации универсального "GetAllItems"рутина.

0 голосов
/ 10 января 2012

cfg.GetClassMapping(typeof(Employee)).Table.Name также будет работать, и, кажется, будет намного проще.

0 голосов
/ 23 декабря 2010

Привет! Я использую это для создания полнотекстовых каталогов на сервере M $ Sql, используя почти тот же механизм отображения FluentNhibernate.

Из конфигурации я получаю список persistentClasses

this.persistenClasses = configuration.ClassMappings;

Далее я просматриваю этот список, чтобы найти свой класс persistenClass по его общему типу класса отображения

var genericDefinition = mappingClass.BaseType.GetGenericArguments()[0];
var matchedPersistClass = FindPersistedClassFrom(genericDefinition);


        private PersistentClass FindPersistedClassFrom(Type genericDefinition)
        {
            return persistentClasses.FirstOrDefault(x => x.EntityName == genericDefinition.FullName);
        }

Таким образом, имея persistentClass, вы легко получаете доступ к Имени таблицы, свойствам, полям БД и т. Д.

TableName = matchedPersistClass.Table.Name,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...