FluentNHibernate - 在映射时获取实体名称。目前的方法已经过时

时间:2011-06-08 13:01:52

标签: nhibernate orm fluent-nhibernate nhibernate-mapping

我目前正在使用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());
        }
    }

以下是完成此操作的完整代码。

2 个答案:

答案 0 :(得分:3)

以下是使用公约的方法:

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

答案 1 :(得分:2)

也许尝试约定,FluentNHibernate Conventions