首页 > 解决方案 > 在 NHibernate 事件监听器中处理复合主键

问题描述

我正在尝试从 NHibernate 事件侦听器中提取原始实体的主键属性名称和值,并且我希望它能够处理复合主键。

我遇到的问题是,在我的事件处理程序中,当处理复合主键时,Id被触发的事件的属性似乎绑定到整个原始实体:

复合主键绑定到原始实体

如何获取原始 ID 属性名称和相应的值?

标签: databasenhibernateevent-handlingcomposite-primary-key

解决方案


我会为组件使用以下代码:

if (@event.Persister.IdentifierType.IsComponentType)
{
    var componentType = (IAbstractComponentType) @event.Persister.IdentifierType;
    var values = componentType.GetPropertyValues(@event.Id);
    var propertyNames = componentType.PropertyNames;
    for (int i = 0; i < values.Length; i++)
    {
        Console.WriteLine($"PropertyName: {propertyNames[i]}, Value: {values[i]}");
    }
}

推荐阅读