2010-12-23 12 views
6

Después de haber configurado sus asignaciones en nhibernate con fluidez, ¿hay alguna forma de obtener el nombre de la tabla para una entidad del tipo de clase?Obtener nombres de tablas de Fluent Nhibernate

He leído en un nhiberante normal que puede hacer algo como cfg.GetClassMapping(typeof (Employee)). Me gustaría hacer el tipo de cosas para recuperar el nombre de la tabla de la base de datos.

¿Es esto posible de forma estándar o cómo voy a hacer esto?

Respuesta

0

Hola, estoy usando esto para crear catálogos de texto completo en servidor M $ Sql, usando casi el mismo mecanismo de mapeo FluentNhibernate.

De Configuración consigo una lista de persistentClasses

this.persistenClasses = configuration.ClassMappings; 

siguiente que buscar a través de esta lista para encontrar mi clase persistenClass por su tipo genérico de la clase mapeo

var genericDefinition = mappingClass.BaseType.GetGenericArguments()[0]; 
var matchedPersistClass = FindPersistedClassFrom(genericDefinition); 


     private PersistentClass FindPersistedClassFrom(Type genericDefinition) 
     { 
      return persistentClasses.FirstOrDefault(x => x.EntityName == genericDefinition.FullName); 
     } 

Así que tener persistentClass que fácilmente tiene acceso al nombre de tabla, propiedades, campos db, etc.

TableName = matchedPersistClass.Table.Name, 
+0

Parece que no funciona con un objeto de configuración fluent-nhibernate – Ha11owed

0

cfg.GetClassMapping(typeof(Employee)).Table.Name también funcionará, y parece ser mucho más simple.

+0

parece no funcionar con un objeto de configuración – Ha11owed

8

La fluidez manera nhibernate:

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

donde sessionFactory es de tipo ISessionFactory.

+0

En caso de que alguien más esté haciendo esto en VB.NET, es solo un caso de alteración de la sintaxis de conversión - DirectCast (sessionFactory.GetClassMetadata (typeof (SomeEntity)), AbstractEntityPersister) .TableName – phillyd

1

Suponiendo que usted ha hecho esto en algún momento:

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

Entonces todo lo que tiene que hacer es esto:

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

funcionó muy bien en mi aplicación de un "GetAllItems" rutina genérica.

Cuestiones relacionadas