根据此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不是引用的实体,我看不到获取“父”实体的属性。
我该怎么做?
答案 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
属性。