在 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]}");
}
}
我正在尝试从 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]}");
}
}