Получить имя свойства из столбца с отображением - PullRequest
0 голосов
/ 20 октября 2011

Фон

У меня есть класс с именем "Dog", который ссылается на другой класс с именем "Tail", который имеет свойство с именем "Size".Итак, если бы я хотел узнать размер хвоста собаки, это был бы «Dog.Tail.Size».Отлично.

У меня это сопоставлено с FluentNHibernate Вот так:

 public class DogMap : ClassMap<Dog>
 {
    public DogMap()
    { 
        ... other things here
        Component(x => x.Tail, t => {
            t.Map(x => x.Size, "DG_TL_SIZE").Length(2).Not.Nullable();
        }
    }
 }

Вопрос

Имея имя столбца "DG_TL_SIZE", как можноя получаю "Dog.Tail.Size"?Я знаю, что могу, после того, как у меня есть Dog.Tail.Size, получить "persistentClass.GetRecursiveProperty("Dog.Tail.Size")" для получения свойства и работы с ним.

Дело в том, что мне нужно изменить его значение, поэтому мне нужен PropertyInfoИсходя из этого, но это не должно быть трудно получить, когда у меня есть "Dog.Tail.Size".

Итак, как я могу получить "Dog.Tail.Size"?

1 Ответ

0 голосов
/ 20 октября 2011

вы можете перебрать все свойства, хотя представленный код требует рефакторинга

foreach (var prop in persistentclass.PropertyClosureIterator)
{
    IValue property = prop.Value;
    if (prop.IsComposite)
    {
        var component = (NHibernate.Mapping.Component)prop.Value;

        foreach (var prop2 in component.PropertyIterator)
        {
            foreach (var column in prop2.ColumnIterator)
            {
                if (column.Text == "my Column")
                {
                    // do something with the 'prop2'
                }
            }
        }
    }
    else
    {
        foreach (var column in prop.ColumnIterator)
        {
            if (column.Text == "my Column")
            {
                // do something with the 'prop'
            }
        }
    }
}
...