Как настроить NHibernate (или Fluent NHib) для добавления префикса имени таблицы ко всем именам таблиц? - PullRequest
5 голосов
/ 05 октября 2009

В текущем приложении, которое я разрабатываю, я использую Fluent NHibernate для настройки NHibernate для использования в качестве ORM. Я хочу иметь возможность добавить префикс ко всем именам таблиц, используемых в приложении, чтобы при использовании базы данных, которая уже обслуживает другое приложение, между этими двумя приложениями не возникало конфликтов имен.

Так, например, если бы я хотел добавить префикс Portal_ к каждой таблице, таблица Users стала бы Portal_Users.

Конечно, я знаю, как настроить имя каждой таблицы в каждом файле сопоставления, но это не совсем хорошее решение для того, что я пытаюсь сделать. Если бы я захотел изменить префикс, я был бы вынужден изменить каждый из файлов сопоставления. Я хочу иметь возможность добавить (или изменить) префикс ко всем именам таблиц в одном месте в моем коде или конфигурации.

Как добавить префикс ко всем именам таблиц в приложении, используя NHibernate (или Fluent NHibernate)?

Ответы [ 2 ]

3 голосов
/ 05 октября 2009

Вы можете реализовать свой собственный INamingStrategy и указать его для своей конфигурации:

Configuration config = new Configuration();
config.SetNamingStrategy(new MyTablePrefixStrategy());
2 голосов
/ 05 октября 2009

Для быстрой реализации ..

 public class AutoPersistenceModelGenerator : IAutoPersistenceModelGenerator
    {
        public AutoPersistenceModel Generate()
        {
            var mappings = new AutoPersistenceModel();
            mappings.AddEntityAssembly(typeof(User).Assembly).Where(GetAutoMappingFilter);
            mappings.Conventions.Setup(GetConventions());

.....
    private Action<IConventionFinder> GetConventions()
    {
        return c =>
        {
            c.Add<PrimaryKeyConvention>();
            c.Add<ReferenceConvention>();
            c.Add<HasManyConvention>();
            c.Add<TableNameConvention>();

......

       public class TableNameConvention : IClassConvention
        {
            public void Apply(FluentNHibernate.Conventions.Instances.IClassInstance 
instance)
            {
                instance.Table(Inflector.Net.Inflector.Pluralize("Portal_" + 
    instance.EntityType.Name));
                }
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...