Fluent NHibernate AutoMapping中的自定义命名约定

时间:2009-08-12 05:58:47

标签: nhibernate fluent-nhibernate naming-conventions

根据此Post,可以将命名约定从“[TableName] _id”更改为“[TableName] ID”。然而,当我看到代码时,我无法使用我的新版(约6周龄)Fluent NHibernate进行编写。

原始代码:

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不是引用的实体,我看不到获取“父”实体的属性。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

请参阅The answer about removing underscores in Ids using Fluent NHibernate Automapping conventions here.

文本的一部分,表格和类都在链接中。

解决方案:

添加约定,可以是系统范围的,也可以是更受限制的。

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();

现在,它会将ShelfId列自动化为Shelf中的Product属性。