繁体   English   中英

从流畅映射的列名称中检索属性名称

[英]Retrieve property name from Fluently mapped column name

背景

我有一个名为“ 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”?

您可以遍历所有属性,但是所提供的代码需要重构

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'
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM