2010-12-23 70 views
6

在流利的nhibernate中设置映射后,是否有一种方法从类类型获取实体的表名?从Fluent Nhibernate获取表名

我已经阅读了常规nhiberante你可以做一些像cfg.GetClassMapping(typeof (Employee))。我想做一些事情来检索数据库表名。

这是可能的标准或我会怎么做呢?

回答

0

您好我正在使用它在M $ Sql Server上创建全文目录,使用几乎相同的FluentNhibernate映射机制。

从配置我得到persistentClasses列表

this.persistenClasses = configuration.ClassMappings; 

接下来,我通过搜索这个列表中的泛型类型映射类的找我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你轻松拥有访问表名称,属性,db字段等。

TableName = matchedPersistClass.Table.Name, 
+0

似乎不适用于流利的nhibernate配置对象 – Ha11owed 2012-03-23 01:50:53

0

cfg.GetClassMapping(typeof(Employee)).Table.Name也可以工作,而且似乎更简单。

+0

似乎不适用于流畅的配置对象 – Ha11owed 2012-03-23 01:50:26

8

的功能NHibernate方式:

sessionFactory.GetClassMetadata(typeof(SomeEntity)) as NHibernate.Persister.Entity.AbstractEntityPersister; 
var cols = userMetadata.KeyColumnNames; 
var table = userMetadata.TableName; 

其中的sessionFactory是类型ISessionFactory的。

+0

如果其他人在VB.NET中这样做 - 这只是一个改变铸造语法的情况 - DirectCast(sessionFactory.GetClassMetadata(typeof(SomeEntity)),AbstractEntityPersister).TableName – phillyd 2015-12-10 10:19:26

1

假设你已经在某一点做到了这一点:

FluentNHibernate.Cfg.FluentConfiguration fluentConfig = FluentNHibernate.Cfg.Fluently.Configure(); 

然后,所有你需要做的是这样的:

string tableName = fluentConfig.BuildConfiguration().GetClassMapping(typeof (One of your data entities)).Table.Name; 

我在执行一个通用的“GetAllItems”例行的工作很大。