В настоящее время я автоматически называю свои таблицы в беглом 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());
}
}
Вот полный код, чтобы все заработало.