使用流畅的nhibernate设置映射后,有没有办法从类类型中获取实体的表名?
我已经阅读了常规的nhiberante,你可以做cfg.GetClassMapping(typeof (Employee))
之类的事情。我想做的事情是检索数据库表名。
这是否可以作为标准或我将如何解决这个问题?
答案 0 :(得分:10)
流利的nhibernate方式:
var userMetadata = sessionFactory.GetClassMetadata(typeof(SomeEntity)) as NHibernate.Persister.Entity.AbstractEntityPersister;
var cols = userMetadata.KeyColumnNames;
var table = userMetadata.TableName;
其中sessionFactory的类型为ISessionFactory。
答案 1 :(得分:2)
假设你已经在某个时候做到了这一点:
FluentNHibernate.Cfg.FluentConfiguration fluentConfig = FluentNHibernate.Cfg.Fluently.Configure();
然后你要做的就是:
string tableName = fluentConfig.BuildConfiguration().GetClassMapping(typeof (One of your data entities)).Table.Name;
在我的通用“GetAllItems”例程的实现方面做得很好。
答案 2 :(得分:0)
您好我正在使用它在M $ Sql Server上创建全文目录,使用几乎相同的FluentNhibernate映射机制。
从配置中我得到了persistentClasses的列表
this.persistenClasses = configuration.ClassMappings;
接下来,我搜索这个列表,通过它的Generic类型的映射类
找到我的persistenClass类var genericDefinition = mappingClass.BaseType.GetGenericArguments()[0];
var matchedPersistClass = FindPersistedClassFrom(genericDefinition);
private PersistentClass FindPersistedClassFrom(Type genericDefinition)
{
return persistentClasses.FirstOrDefault(x => x.EntityName == genericDefinition.FullName);
}
因此,拥有persistentClass可以轻松访问表名,属性,数据库字段等。
TableName = matchedPersistClass.Table.Name,
答案 3 :(得分:0)
cfg.GetClassMapping(typeof(Employee)).Table.Name
也会起作用,而且似乎更简单。