Fluent NHibernate自动映射中的自定义命名约定
据此,可以将命名约定从“[TableName]\u id”更改为“[TableName]id”。然而,当我看到代码时,我无法用我的Fluent-NHibernate的新版本(大约6周前)完成 原始代码: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
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
属性