在 NHibernate 事件监听器中处理复合主键

Handling compound primary keys in NHibernate event listeners

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

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

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

if (@event.Persister.IdentifierType is NHibernate.Type.EmbeddedComponentType identifierType)
{
    // This entity has a composite primary key.

    foreach (var propertyName in identifierType.PropertyNames)
    {
        // Because we only have the name of the property we have to use reflection to get
        // the corresponding value.
        object propertyValue = @event.Id.GetType().GetProperty(propertyName).GetValue(entityId);
    }
}

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

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]}");
    }
}