FluentNHibernate - получение имени объекта при отображении.Текущий метод устарел - PullRequest
1 голос
/ 08 июня 2011

В настоящее время я автоматически называю свои таблицы в беглом NHibernate, используя AutoMappingOverride's и устанавливая в качестве имени таблицы множественное имя объекта, например, так.

public class PersonMappingOverride : IAutoMappingOverride<Person>
    {
        public void Override(AutoMapping<Person> mapping)
        {
            mapping.Table(mapping.EntityType.Name.Pluralize());
            mapping.Id(x => x.PersonId).Column("PersonId").GeneratedBy.Increment();
            mapping.Map(x => x.Name).CustomSqlType("nvarchar(200)");
        }
    }



  public static string Pluralize(this string input)
        {
            return System.Data.Entity.Design.PluralizationServices.PluralizationService.CreateService(new CultureInfo("en-US")).Pluralize(input);
        }

Я получаю следующую ошибку.

'FluentNHibernate.Mapping.ClasslikeMapBase.EntityType' устарел: 'Не вызывайте этот метод.Реализация детали по ошибке обнародована.Будет закрытым в следующей версии. '

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

Приветствия

Стив

Спасибо за отличную помощь, ребята.Использование соглашений в моем случае использования более элегантно, чем переопределения.

var sqlConfig = MsSqlConfiguration.MsSql2005.ConnectionString(ConnectionString);
            var config = Fluently.Configure().Database(sqlConfig);
            config.Mappings(c => c.AutoMappings.Add(AutoMap.AssemblyOf<User>(new IJAutomappingConfiguration()).Conventions.AddFromAssemblyOf<TableNamingConvention>())); 




  public class TableNamingConvention : IClassConvention
    {
        public void Apply(IClassInstance instance)
        {
            instance.Table(instance.EntityType.Name.Pluralize());
        }
    }

Вот полный код, чтобы все заработало.

Ответы [ 2 ]

3 голосов
/ 08 июня 2011

Вот как вы это сделаете, используя конвенцию:

public class NamingConvention : IClassConvention
{
    public void Apply(IClassInstance instance)
    {
        instance.Table(instance.EntityType.Name.Pluralize());
    }
}
2 голосов
/ 08 июня 2011

Возможно, пробует соглашения, Свободные соглашения о гибернации

...