我目前正在使用AutoMappingOverride自动命名我的表在流畅的NHibernate中,并将表的名称设置为实体的复数名称,如此。
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());
}
}
以下是完成此操作的完整代码。
答案 0 :(得分:3)
以下是使用公约的方法:
public class NamingConvention : IClassConvention
{
public void Apply(IClassInstance instance)
{
instance.Table(instance.EntityType.Name.Pluralize());
}
}
答案 1 :(得分:2)
也许尝试约定,FluentNHibernate Conventions