Fluent NHibernate自动映射中的自定义命名约定

Fluent NHibernate自动映射中的自定义命名约定,nhibernate,fluent-nhibernate,naming-conventions,Nhibernate,Fluent Nhibernate,Naming Conventions,据此,可以将命名约定从“[TableName]\u id”更改为“[TableName]id”。然而,当我看到代码时,我无法用我的Fluent-NHibernate的新版本(大约6周前)完成 原始代码: var cfg = new Configuration().Configure(); var persistenceModel = new PersistenceModel(); persistenceModel.addMappingsFromAssembly(Assembly.Load(&qu

据此,可以将命名约定从“[TableName]\u id”更改为“[TableName]id”。然而,当我看到代码时,我无法用我的Fluent-NHibernate的新版本(大约6周前)完成

原始代码:

var cfg = new Configuration().Configure();
var persistenceModel = new PersistenceModel();
persistenceModel.addMappingsFromAssembly(Assembly.Load("Examinetics.NHibernate.Data"));
persistenceModel.Conventions.GetForeignKeyNameOfParent = type => type.Name + "ID";
persistenceModel.Configure(cfg);
factory = cfg.BuildSessionFactory();
我想到了这个:

PersistenceModel model = new PersistenceModel();
model.AddMappingsFromAssembly(assemblyType.Assembly);
model.ConventionFinder.Add(
    ConventionBuilder.Reference.Always(part
        => part.ColumnName(part.EntityType.Name + part.Property.Name)));

configuration.ExposeConfiguration(model.Configure);
return configuration.BuildConfiguration();
但这给了我原始表,因为EntityType不是被引用的实体,我看不到任何属性来获取“父”实体

我如何才能做到这一点?

请参见

部分文本、表格和类位于链接中

解决方案: 添加约定,可以是系统范围的约定,也可以是更严格的约定

ForeignKey.EndsWith("Id")
代码示例:

var cfg = new StoreConfiguration();
var sessionFactory = Fluently.Configure()
  .Database(/* database config */)
  .Mappings(m =>
    m.AutoMappings.Add(
      AutoMap.AssemblyOf<Product>(cfg)
          .Conventions.Setup(c =>
              {
                  c.Add(ForeignKey.EndsWith("Id"));
              }
    )
  .BuildSessionFactory();
var cfg=newstoreconfiguration();
var sessionFactory=fluntly.Configure()
.Database(/*数据库配置*/)
.Mappings(m=>
m、 自动映射。添加(
自动装配(cfg)
.Conventions.Setup(c=>
{
c、 添加(ForeignKey.EndsWith(“Id”);
}
)
.BuildSessionFactory();
现在,它将自动将
ShelfId
列映射到
Product
中的
Shelf
属性