相关疑难解决方法(0)

从NHibernate元数据中获取类字段名称和表列名称

背景

我正在使用一个带有各种丑陋角落的遗留数据库.一点是审计.有一个表列出了应具有审计跟踪的字段的表名/字段组合.例如,如果某个行的表名为"WORKORDER"而fieldname为"STATUS",那么每当Workorder.Status属性在应用程序中发生更改时,我都需要将行添加到审计表中.我知道这个方法:NH事件或拦截器,但是在我到达那个阶段之前我有一个问题需要弄清楚.

我需要知道的是如何获取单个持久化类的键/值对列表,其中包含(a)数据库字段名称和(b)类中的关联属性名称.因此,对于我的示例,我有一个名为Workorder的类与一个名为(毫无意外)WORKORDER的表相关联.我在该Workorder类上有一个名为CurrentStatus的属性.WORKORDER表中的匹配属性是STATUS.注意属性名称和表列名称不匹配?我需要知道属性名称才能访问审计的前后数据.但我还需要知道支持列名称,以便我可以查询愚蠢的遗留"AuditTheseColumns"表.

我试过的

在我的应用程序中,我将Workorder.CurrentStatus从"TS"更改为"IP".我查看我的审计跟踪表,看到跟踪了WORKORDER.STATUS列.因此,在调用Session.SaveOrUpdate(workorder)之后,我需要找到与STATUS列关联的Workorder属性,并执行Session.Save(auditRecord)告诉它旧的("TS")和新的("IP")值.

据我所知,您可以获得有关该课程的信息:

        var fieldNames = new List<string>();
        IClassMetadata classMetadata = SessionFactory(Resources.CityworksDatasource).GetClassMetadata(typeof(T));
        int propertyCount = 0;
        foreach (IType propertyType in classMetadata.PropertyTypes)
        {
            if (propertyType.IsComponentType)
            {
                var cp = (ComponentType)propertyType;

                foreach (string propertyName in cp.PropertyNames)
                {
                    fieldNames.Add(propertyName);
                }
            }
            else if(!propertyType.IsCollectionType)
            {
                fieldNames.Add(classMetadata.PropertyNames[propertyCount + 1]);
            }

            propertyCount++;
        }
Run Code Online (Sandbox Code Playgroud)

有关该表的信息:

        var columnNames = new List<string>();
        PersistentClass mappingMeta = ConfigureCityworks().GetClassMapping(typeof(T));

        foreach (Property property in mappingMeta.PropertyIterator)
        {
            foreach (Column selectable in property.ColumnIterator)
            {
                if (columnNames.Contains(selectable.Name)) continue;
                columnNames.Add(selectable.Name);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但不是在同一时间.有任何想法吗?我不知道在哪里看下一个.

nhibernate metadata

7
推荐指数
2
解决办法
8150
查看次数

标签 统计

metadata ×1

nhibernate ×1