0
我想知道是否有人知道如何使用NHibernate找到實體屬性映射到的列,並且只有IEntityPersister
接口可用。查找實體屬性映射到的數據庫列
我想知道是否有人知道如何使用NHibernate找到實體屬性映射到的列,並且只有IEntityPersister
接口可用。查找實體屬性映射到的數據庫列
如果您使用映射文件,則可以解析該映射文件。這是相當簡單的XML,所以一個簡單的xpath查詢會得到你的列名。如果您使用屬性,則必須使用反射才能從屬性中獲取屬性。
以下是一些可能有所幫助的代碼。
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;
}
}
我曾考慮過這樣做。我只是希望在IEntityPersister接口中有一個over/miss命名的屬性,它讓我可以在不需要解析的情況下找到列名。 – MisterHux 2009-08-20 14:58:47