查找实体属性映射到的数据库列

时间:2009-08-19 23:09:20

标签: c# .net nhibernate nhibernate-mapping

我想知道是否有人知道如何使用NHibernate找到实体属性映射到的列,并且只有IEntityPersister接口可用。

2 个答案:

答案 0 :(得分:0)

如果使用映射文件,则可以解析该映射文件。它是相当简单的xml,因此一个简单的xpath查询可以获得列名。如果使用属性,则必须使用反射从属性中获取属性。

答案 1 :(得分:0)

以下是一些可能有用的代码。

    public static string[] GetDatabaseColumnNamesFromEntityProperty(Type entityType, string propertyName)
    {
        PersistentClass aNHibernateClass = NHibernateSessionManager.Instance.GetNHibernateConfiguration().GetClassMapping(entityType);

        if (aNHibernateClass == null)
        {
            return null;
        }
        else
        {
            string[] columnNames = null;

            try
            {
                Property aProperty = aNHibernateClass.GetProperty(propertyName);
                columnNames = new string[aProperty.ColumnCollection.Count];

                int count = 0;

                foreach (Column column in aProperty.ColumnCollection)
                {
                    columnNames[count] = column.Name;
                    count++;
                }
            }
            catch(Exception)
            {
                Property aProperty = aNHibernateClass.IdentifierProperty;

                //if(aProperty.Name.Equals(propertyName))
                //{
                    columnNames = new string[aProperty.ColumnCollection.Count];
                    int count = 0;

                    foreach (Column column in aProperty.ColumnCollection)
                    {
                        columnNames[count] = column.Name;
                        count++;
                    }
                //}
            }

            return columnNames;
        }
    }