从Fluent Nhibernate获取表名

时间:2010-12-23 09:30:36

标签: fluent-nhibernate

使用流畅的nhibernate设置映射后,有没有办法从类类型中获取实体的表名?

我已经阅读了常规的nhiberante,你可以做cfg.GetClassMapping(typeof (Employee))之类的事情。我想做的事情是检索数据库表名。

这是否可以作为标准或我将如何解决这个问题?

4 个答案:

答案 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也会起作用,而且似乎更简单。